gpt4 book ai didi

tsql - 存储过程是否可以在 “IN”子句中​​使用动态参数?

转载 作者:行者123 更新时间:2023-12-04 13:18:11 26 4
gpt4 key购买 nike

我想运行这样的查询:

 SELECT * FROM Studio WHERE Id IN (134, 144, 132, 138, 7432, 7543, 2566)

但是传递给IN子句的 Id 的数量仅在运行时确定。

我必须使用动态SQL还是可以通过存储过程来完成?

更新:
如果有一个选项可用,哪个更好?

谢谢。

最佳答案

根据您的Sql Server版本,您可以使用两种不同的方法之一来执行此操作。

对于Sql 2000/2005,可以使用具有定界ID列表的参数(类型varchar)。创建一个将解析varchar并返回包含项的表的UDF。然后使您的IN子句与该表相反(即... IN(从@ReturnTable选择ID))。

这是UDF内容的示例:
http://pietschsoft.com/post/2006/02/03/T-SQL-Parse-a-delimited-string.aspx

对于Sql 2008,您可以执行相同的操作。但是,除了传递varchar参数外,您还可以直接切入并传递Table参数。 IN子句仍将有一个子查询,但它将完全相同。另外,一旦有了该表,就可以对它执行内部联接并规避对IN子句的需要。

编辑:添加了用于解析分隔的字符串链接的UDF。

关于tsql - 存储过程是否可以在 “IN”子句中​​使用动态参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com