mssql 存储过程动态参数实现方法

-创建测试表

CREATE TABLE [dbo].[Student](
    [ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Name] [nvarchar](20) NOT NULL   DEFAULT (''),
    [Age] [int] NOT NULL DEFAULT (0),
    [Sex] [bit] NOT NULL DEFAULT (0),
    [Address] [nvarchar](200)  NOT NULL DEFAULT ('')
)

--比如是一个查询存储过程

Create PROC GetStudentByType
    @type int =0, -- 1根据id查询,  2根据性别查询
    @args XML     -- 参数都写到这里吧
AS
BEGIN
    DECLARE @id INT,@sex BIT
    SET @id=@args.value('(args/id)[1]','int')   --参数都可以写在这里,如果没有传过来,大不了是null值了,反正也用不到,没关系的
    SET @sex =@args.value('(args/sex)[1]','bit')
   
    IF(@type=1)
    BEGIN
        SELECT * FROM dbo.Student WHERE ID=@id
    END
    IF(@type=2)
    BEGIN
        SELECT * FROM dbo.Student WHERE Sex=@sex
    END
END   
 

参数写xml里感觉比用字符串要好很多,这样调用时参数就不好组织了,所以这里要有个帮助类XmlArgs

public class XmlArgs
    {
        private string _strArgs = string.Empty;
        private bool _isCreate = false;
        private Dictionary<string, string> _args;
        public string Args
        {
            get
            {
                if (!_isCreate)
                {
                    _strArgs = _CreateArgs();
                }
                return _strArgs;
            }
        }

        public XmlArgs()
        {
            _args = new Dictionary<string, string>();
        }

        public void Add(string key, object value)
        {
            _args.Add(key, value.ToString());
            _isCreate = false;
        }

        public void Remove(string key)
        {
            _args.Remove(key);
            _isCreate = false;
        }

        public void Clear()
        {
            _args.Clear();
            _isCreate = false;
        }

        private string _CreateArgs()
        {
            if (_args.Count == 0)
            {
                return string.Empty;
            }
            StringBuilder sb = new StringBuilder();
            foreach (string key in _args.Keys)
            {
                sb.AppendFormat("<{0}>{1}</{0}>", key, _args[key]);
            }
            return sb.ToString();
        }
    }
 

调用:

private void BindData()
{
    XmlArgs args = new XmlArgs();
    args.Add("id", 1);
    System.Data.DataTable dt = GetStudentByType(1, args);
    GridView1.DataShow(dt);
}
private System.Data.DataTable GetStudentByType(int type, XmlArgs args)
{
    SqlHelper helper = new SqlHelper();
    helper.Params.Add("type", type);
    helper.Params.Add("args", args.Args);
    System.Data.DataTable dt = helper.RunDataTable("GetStudentByType");
    return dt;
}

时间: 2024-10-13 10:55:06

mssql 存储过程动态参数实现方法的相关文章

关于mssql 存储过程,函数 参数 默认值说明(1/4)

关于mssql 存储过程,函数 参数 默认值说明 创建我们一般的写法 create proc p(@s varchar(1)='a') as select @s go exec p go --1 alter proc p (@s decimal=a) as   select @s go exec p go /* 服务器: 消息 8114,级别 16,状态 5,过程 p,行 0 将数据类型 nvarchar 转换为 numeric 时出错. */ --2 alter proc p (@s varc

asp.net mssql存储过程输出参数的调用

asp教程.net mssql存储过程输出参数的调用 最简单的语法 create proc p as   select * from tb sql存储过程的概念,优点及语法 整理在学习程序过程之前,先了解下什么是存储过程?为什么要用存储过程,他有那些优点 定义:将常用的或很复杂的工作,预先用sql语句写好并用一个指定的名称存储起来, 那么以后要叫数据库教程提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令. 讲到这里,可能有人要问:这么说存储过程就是一堆sql语

sqlserver 存储过程动态参数调用实现代码_MsSql

只是做笔记,没什么!! 复制代码 代码如下: --创建测试表 CREATE TABLE [dbo].[Student]( [ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] [nvarchar](20) NOT NULL DEFAULT (''), [Age] [int] NOT NULL DEFAULT (0), [Sex] [bit] NOT NULL DEFAULT (0), [Address] [nvarchar](200) NOT

sqlserver 存储过程动态参数调用实现代码

只是做笔记,没什么!! 复制代码 代码如下: --创建测试表 CREATE TABLE [dbo].[Student]( [ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] [nvarchar](20) NOT NULL DEFAULT (''), [Age] [int] NOT NULL DEFAULT (0), [Sex] [bit] NOT NULL DEFAULT (0), [Address] [nvarchar](200) NOT

sqlserver-写MSSQL存储过程 输入参数N(1……100之间)的整数,输出1+2+……N的和

问题描述 写MSSQL存储过程 输入参数N(1--100之间)的整数,输出1+2+--N的和 写MSSQL存储过程 输入参数N(1--100之间)的整数,输出1+2+--N的和.用sql server存储过程怎么写 解决方案 create PROCEDURE [dbo].exp1002 AS BEGIN set @tsum=@n while @n-1>=0 begin set @n=@n-1 set @tsum=@tsum+@n end print '得到的结果是:'+ convert(varc

ASP调用带参数的MSSQL存储过程,并返回临时表记录集

前些天,阿里西西web团队(Alixixi.com)在开发一个系统平台时,需要通过存储过程调用多个表的几个字段,合并到一个临时表中,并进行排序返回给ASP调用. 下面,我把经验分享出来: 1.存储过程部分: 以下是存储过程部分:CREATE PROCEDURE [dbo].[alixixi] @sNum int, @sOrder varchar(20)  AS SET nocount on create table #btable (id int,channelid int,classid in

jQuery支持动态参数将函数绑定到事件上的方法

这篇文章主要介绍了jQuery支持动态参数将函数绑定到事件上的方法,实例分析了两种支持动态参数的函数绑定技巧,需要的朋友可以参考下     本文实例讲述了jQuery支持动态参数将函数绑定到事件上的方法.分享给大家供大家参考.具体分析如下: 下面的js代码提供了两种方法用于绑定函数到事件,其中方法二可以传递动态参数,非常实用 ? 1 2 3 4 5 6 7 8 9 //方法一 $('#foo').click(function(event) { alert('User clicked on "fo

js动态创建的方法传递参数

问题描述 js动态创建的方法传递参数 用ajax获取了 json数据 存进数组 动态创建a标签 现在想点击a时 触发onclick事件时传递参数 但一直失败 无奈 想知道怎么才能把参数传递出去上代码: mdId_arr.push('<li><a href=""#"">'+info.lists[i]+'</a>'+ '<a href=""#"" data-icon=""

Vue.js Ajax动态参数与列表显示实现方法_javascript技巧

Vue.js简介 vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API. 一.动态参数显示 ajax异步请求后,接收到返回的data参数并显示在前端 1.1 引入js,也加入了jQuery <script type="text/javascript" src="/js/vue.min.js"></script> <script type="text/javascript&