我有一个存储过程,需要在SQL Server 2012中传递多个参数。我的应用程序将为所有员工或特定员工构建一个报告。如果用户想要选择某些员工而不是全部员工,我有一个员工核对清单框。我想在存储过程的where子句中使用那些选定的员工。我读过SQL Server 2012,你可以将一个表作为参数传递给多个值。我似乎无法找到一个适合我的情况的好例子。任何帮助将不胜感激。将多个参数传递到SQL Server存储过程
回答
假设你传递了EmployeeIDs,它们是整数。首先,在数据库中创建一个表类型:
CREATE TYPE dbo.EmployeesTVP AS TABLE(EmployeeID INT PRIMARY KEY);
现在你的存储过程可以说:
CREATE PROCEDURE dbo.GetEmployees
@empTVP dbo.EmployeesTVP READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT EmployeeID, Name FROM dbo.Employees AS e
WHERE EXISTS (SELECT 1 FROM @empTVP WHERE EmployeeID = e.EmployeeID);
END
GO
如果你要处理的所有情况下,你可以说:
IF EXISTS (SELECT 1 FROM @empTVP)
SELECT EmployeeID, Name FROM dbo.Employees AS e
WHERE EXISTS (SELECT 1 FROM @empTVP WHERE EmployeeID = e.EmployeeID);
ELSE
SELECT EmployeeID, Name FROM dbo.Employees;
(您可以将这些条件与OR
条件相结合,但我倾向于认为这只是优化程序的适合。)
然后,在复选框的C#代码中创建一个DataTable,并将该参数作为Structured
的参数类型传递给存储过程。您可以填写其余但是:
DataTable tvp = new DataTable();
// define/populate DataTable from checkboxes
using (connectionObject)
{
SqlCommand cmd = new SqlCommand("dbo.GetEmployees", connectionObject);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@empTVP", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
// ... execute the cmd, grab a reader, etc.
}
+1:漂亮的解决方案 –
即将关闭。我将不得不在我的存储过程中执行此操作: 其中empName类似于“参数” 或empName类似于“parameter1” – grath
@grath好吧,相同的概念,你能适应它吗?你的问题听起来像是你要么传递一个或多个员工ID,要么没有。 –
- 1. 如何将多个参数传递到SQL Server存储过程
- 2. 将一个布尔参数传递给SQL Server存储过程
- 3. Delphi - 将表值参数传递给SQL Server存储过程
- 4. C#Winforms - 如何将参数传递给SQL Server存储过程
- 5. 问题将XML参数传递给SQL Server存储过程
- 6. 将xml字符串参数传递给SQL Server存储过程
- 7. 使用PHP PDO将参数传递给SQL Server存储过程
- 8. 使用OpenXML将多个参数传递给SQL Server存储过程
- 9. 通过Delphi传递SQL Server存储过程参数名称
- 10. 将参数从一个存储过程传递到另一个存储过程
- 11. 传递多个参数到SQL Server
- 12. SQL存储过程将参数传递到“order by”
- 13. 将参数传递给存储过程
- 14. SQL Server 2012 - 将存储过程名称传递给另一个存储过程
- 15. 将对象集合作为参数传递到SQL Server存储过程
- 16. 将参数从访问变量传递到SQL Server存储过程
- 17. 在SQL Server存储过程中使用参数传递表名
- 18. 将许多值传递给SQL Server存储过程
- 19. 将多行传递给SQL Server存储过程
- 20. 传递参数到存储过程
- 21. 将多个参数传递给存储过程
- 22. 如何将值行传递到SQL Server存储过程?
- 23. 如何将日期传递到SQL Server存储过程
- 24. 将数组传递给SQL Server存储过程
- 25. 将数据集传递给SQL Server存储过程
- 26. 如何将可变数量的参数传递给SQL Server存储过程?
- 27. 将数组传递到存储过程
- 28. 存储过程 - 将两个值传递到存储过程
- 29. 通过存储过程传递参数
- 30. 如何将多个参数传递到一个mysql存储过程
请参阅:[Sql参数](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter(v = vs.110).aspx)。 – Brian