我正在尝试将参数数组发送到存储过程
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/