sql-server - T-SQL : pass an array of ids to a stored procedures

标签 sql-server sql-server-2008 tsql

我正在尝试将参数数组发送到存储过程

SELECT [id_Curso] AS IDCurso
  ,[Cod_Estabelecimento] AS CodEstabelecimento
  ,[Des_Estabelecimento] AS DesEstabelecimento
  ,[Cod_Curso] AS CodCurso
  ,[Des_Curso] AS DescCurso
  ,[Cod_Grau] AS CodGrau
  ,[Des_Grau] AS DescGrau
  ,[Cod_Area_Educacao] AS CodAreaEducacao
  FROM [BEP_DEV].[dbo].[Curso]
  where [Cod_Area_Educacao] in @List

DECLARE @List VARCHAR(MAX);
SELECT @List = '(1,2,3,4)';

SELECT [id_Curso] AS IDCurso
  ,[Cod_Estabelecimento] AS CodEstabelecimento
  ,[Des_Estabelecimento] AS DesEstabelecimento
  ,[Cod_Curso] AS CodCurso
  ,[Des_Curso] AS DescCurso
  ,[Cod_Grau] AS CodGrau
  ,[Des_Grau] AS DescGrau
  ,[Cod_Area_Educacao] AS CodAreaEducacao
  FROM [BEP_DEV].[dbo].[Curso]
where [Cod_Area_Educacao] in (1,2,3,4)

我怎样才能将第一个案例转换成类似于第二个案例的东西(有效。)?

我也尝试过使用 xml,但还是无法正常工作。

有什么帮助吗?

最佳答案

这有很多可能性,但考虑到您使用的是 SQL 2008,第一选择是使用新的表值参数,您可以在其中将整个表发送到查询或存储过程一次(在你的例子中,一个表有一个单列和任意数量的 ID)。

首先在你的数据库中创建一个表类型:

CREATE TYPE idTable AS TABLE (id INT)

然后只需使用该类型的参数声明您的过程,并像使用任何其他表一样使用它:

CREATE PROCEDURE SelectList (@IDs idTable READONLY) AS
SELECT * FROM sometable
INNER JOIN @IDs AS idTable ON idTable.id=sometable.id

有一篇很棒的文章详细讨论了此方法和其他方法来完成您需要的操作 http://www.sommarskog.se/arrays-in-sql.html

关于sql-server - T-SQL : pass an array of ids to a stored procedures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328315/

相关文章:

sql - 在 SQL Server 2008 中使用 xml 和存储过程将数据插入到表中

SQL Server Update 仅在其更新时触发并且仅针对列中的特定值

sql - 如何选择 * 除一个字段外,其他所有内容都不同的地方

tsql - SQL Server 2005 用 0 填充数据透视表

sql - 从 SQL Server 2008 中的所有表中选择所有列

SQL Server 2008 : I/O Wait Time per Database File

java - SQL Server JDBC 的驱动程序类名称是什么

sql - MSSQLSM 2008 奇怪的登录在 select 语句上失败

sql - 即使数据存在于 vb.net 中的 SqlDataReader 中,也无法尝试读取数据

sql-server-2008 - T SQL - 空变量