Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 使用varchar值中的IN语句进行选择_Sql Server 2008_Select_Performance - Fatal编程技术网

Sql server 2008 使用varchar值中的IN语句进行选择

Sql server 2008 使用varchar值中的IN语句进行选择,sql-server-2008,select,performance,Sql Server 2008,Select,Performance,可能的重复项: 我有一个存储过程,它必须使用过滤系统选择值。 想象一张桌子 ColA | ColB | ColC | 'A' 12 1 'B' 13 2 'C' 14 3 我需要为存储过程提供一个ColC值列表,用于那些需要这些值的对象,例如(1,3) 会给我A和C 我知道可以在声明中这样做: Select * from Table where ColC in (1,3) 但如何让这一点充满活力?解决方案是在Varchar变量中构造sql命令,

可能的重复项:

我有一个存储过程,它必须使用过滤系统选择值。 想象一张桌子

ColA | ColB | ColC |

'A'    12     1
'B'    13     2
'C'    14     3
我需要为存储过程提供一个ColC值列表,用于那些需要这些值的对象,例如(1,3) 会给我A和C

我知道可以在声明中这样做:

Select *
from Table
where ColC in (1,3)
但如何让这一点充满活力?解决方案是在Varchar变量中构造sql命令,如

SET @MyList ='(1,3)'
SET @SQL = '
     Select *
    from Table
    where ColC in ' + @MyList 

And then execute @SQL
但这是最好的方式吗?这样做动态命令不是太重吗


感谢您的建议。

关于如何进行查询,有很多不同的选项,但是,通常的做法是像您所展示的那样构建查询,因此我认为这是最好的解决方案


编辑:仍然显示将生成查询作为第一种方法。

您使用的是哪个版本的SQL Server?如果没有额外的验证(ID列表),我不会信任此用户输入。SQL Server 2008抱歉,我编辑了标记添加:请看一看这个(臭名昭著的)问题:该链接已过时。而通常的弦乐演奏并不是最好的方式。谢谢,但是,它仍然适用。如果你不这么认为,让我们看看你提出了一个更有效的方法。我添加的链接匹配你的新链接。这是参考源。我已经投票关闭,因为这感谢很多坏的显示名称,方法2你的链接真的帮了我。。