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