sql-server - 通过存储过程传递 "in"列表

标签 sql-server tsql stored-procedures

如何构造一个存储过程来允许我传递(例如)@IDList这样我就可以写:

Select * from Foo Where ID in @IDList

这可行吗?

最佳答案

使用 SQL2005 及更高版本,您可以直接从代码发送数组。

首先创建自定义类型

CREATE TYPE Array AS table (Item varchar(MAX))

比存储过程。

CREATE PROCEDURE sp_TakeArray
    @array AS Array READONLY
AS BEGIN
    Select * from Foo Where ID in (SELECT Item FROM @array)
END

然后从以数组形式传入 DataTable 的代码中进行调用

DataTable items = new DataTable();
items.Columns.Add( "Item", typeof( string ) );

DataRow row = items.NewRow();
row.SetField<string>( "Item", <item to add> );
items.Rows.Add( row );

SqlCommand command = new SqlCommand( "sp_TakeArray", connection );
command.CommandType = CommandType.StoredProcedure;
SqlParameter param = command.Parameters.Add( "@Array", SqlDbType.Structured );
param.Value = items;
param.TypeName = "dbo.Array";

SqlDataReader reader = command.ExecuteReader();

关于sql-server - 通过存储过程传递 "in"列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617706/

相关文章:

sql - vb.net中使用oledb获取sql server print语句的值

sql - 如何使用 MSSQL 在值为空的特定表中的所有列中设为 0

sql - 如何检查一个字段的前五个字符是否与另一个字段匹配?

json - T-SQL : how to process JSON elements with dot in their names?

MySQL 存储过程权限

c# - 尝试连接远程服务器时 SSIS 执行失败

sql-server - 按值分组并从 T-SQL 中的每个组的点(纬度和经度)创建地理折线

mysql - 如何有效地将 View 用于复杂的MySQL数据库以用于CRUD?

sql - 如何在 SQL 存储过程中使 1 个参数可选

java - SQLServerBulkCopy 错误处理