asp.net - 将集和可选参数传递给存储过程T-SQL-ASP.NET

标签 asp.net tsql stored-procedures set optional-parameters

我有一个带有以下控件的 aspx页面: TextBox,CheckBoxList,DropDownList
它们用于指定搜索条件。使用存储过程从 SQL Server数据库中获取记录。

  • CheckBoxList 中的每个 Checkbox 都有一个值,该值是数据库中产品组的实际ID。如果选中了多个复选框,如何将ID列表作为一组传递给存储过程,以便可以使用 IN @IdList ?我应该在C#和T-SQL中使用哪些变量类型?有可能吗?
  • DropDownList 的第一项是“ALL”。当选择“ALL”,我需要像 NULL 传递到存储过程。如果参数为 NULL ,如何使存储过程忽略该参数?
    创建过程FilterList
    @ProductName nvarchar(200),
    @ProductGroupID int
    从头开始
    选择
    prod_id AS'ID',
    prod_name AS'名称'

    dbo。产品
    在哪里
    prod_group_id = @ProductGroupID或
    prod_name = @ProductName
    结尾
  • 最佳答案

    通过使默认值等于NULL,可以在T-SQL存储过程中实现可选参数。

    NULL用作“忽略此参数”的示例:

    CREATE PROCEDURE [dbo].[dcspFilterEmpList]
        @ProductName nvarchar(200) = null,
        @ProductGroupID int = null
    AS BEGIN 
    
        SELECT
        prod_id AS 'ID',
        prod_name AS 'Name'
        FROM dbo.Products
    
        WHERE (prod_group_id = @ProductGroupID OR @ProductGroupID IS NULL)
        AND (prod_name = @ProductName OR @ProductName IS NULL)
    
    END
    

    定义存储过程以在T-SQL中采用表值参数是完全可以的。
    这是关于http://sqlwithmanoj.wordpress.com/2012/09/10/passing-multipledynamic-values-to-stored-procedures-functions-part4-by-using-tvp/的文章

    如果您需要有关此Google的“表值参数”的更多信息

    使用多值参数的示例:
    CREATE TYPE XTV_ProductNames AS TABLE  --extension, table valued == XTV
    ( ProductName nvarchar(50))
    GO
    CREATE TYPE XTV_ProductGroups AS TABLE  --extension, table valued == XTV
    ( ProductGroupID int))
    GO
    CREATE PROCEDURE [dbo].[dcspFilterEmpList]
        @TVP1 XTV_ProductNames READONLY
        ,@TVP2 XTV_ProductGroups READONLY
    AS BEGIN 
        SELECT
        prod_id AS 'ID',
        prod_name AS 'Name'
        FROM dbo.Products as p
        INNER JOIN @TVP1 as s
            ON p.prod_name = s.ProductName
        UNION
        SELECT
        prod_id AS 'ID',
        prod_name AS 'Name'
        FROM dbo.Products as p
        INNER JOIN @TVP2 as s
            ON p.prod_group_id = s.ProductGroupID
    END
    

    关于asp.net - 将集和可选参数传递给存储过程T-SQL-ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16167793/

    相关文章:

    asp.net - 使用 SQL 数据源调用存储过程?

    c# - 将复杂模型中的列表绑定(bind)到 mvc 应用程序

    SQL选择具有可互换值的两列的唯一组合

    SQL 将多行/记录合并为 3 列的一行

    mysql - 如何创建使用 mysql/mssql 中的表数据生成插入语句的 sql 脚本

    sql - DROP PROCEDURE 抛出语法错误

    c# - Roles.RoleExists() 导致 SQL 网络接口(interface),错误 : 26

    MySQL 存储过程 : Variable set is null though query returns results

    mysql - 不从 MySql 存储过程中检索正确的十六进制值

    javascript - 无法与 asp.net 服务器通信