直接将逗号分隔的字符串传递给 SQL Server 的 IN
函数通常会导致类型转换错误。 例如:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = '1,2,3,5,4,6,7,98,234'; SELECT * FROM sometable WHERE tableid IN (@Ids);</code>
这将产生“转换失败”错误,因为 IN
子句需要单独的整数值,而不是字符串。
动态无 SQL 解决方案
一个强大的替代方案,避免动态 SQL 的陷阱,涉及利用 CHARINDEX
函数:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas SELECT * FROM sometable WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>
通过在输入字符串 @Ids
和转换 tableid
前后添加逗号,我们确保在逗号分隔的字符串中正确识别每个单独的值。 然后,CHARINDEX
函数有效地检查修改后的 tableid
字符串中是否存在每个 @Ids
。 这有效地模仿了 IN
子句的行为,而不需要动态 SQL。
以上是如何在没有动态 SQL 的情况下将逗号分隔的值传递给 SQL Server 的 IN 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!