首页 >数据库 >mysql教程 >如何在没有动态 SQL 的情况下将逗号分隔的值传递给 SQL Server 的 IN 函数?

如何在没有动态 SQL 的情况下将逗号分隔的值传递给 SQL Server 的 IN 函数?

Susan Sarandon
Susan Sarandon原创
2025-01-22 03:56:11340浏览

How to Pass Comma-Delimited Values to SQL Server's IN Function Without Dynamic SQL?

避免动态 SQL:将逗号分隔值传递给 SQL Server 的 IN 子句

直接将逗号分隔的字符串传递给 SQL Server 的 IN 函数通常会导致类型转换错误。 例如:

DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';

SELECT * FROM sometable
WHERE tableid IN (@Ids);

这将产生“转换失败”错误,因为 IN 子句需要单独的整数值,而不是字符串。

动态无 SQL 解决方案

一个强大的替代方案,避免动态 SQL 的陷阱,涉及利用 CHARINDEX 函数:

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;

通过在输入字符串 @Ids 和转换 tableid 前后添加逗号,我们确保在逗号分隔的字符串中正确识别每个单独的值。 然后,CHARINDEX 函数有效地检查修改后的 tableid 字符串中是否存在每个 @Ids。 这有效地模仿了 IN 子句的行为,而不需要动态 SQL。

以上是如何在没有动态 SQL 的情况下将逗号分隔的值传递给 SQL Server 的 IN 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn