来自连接字符串的SQL where子句

时间:2010-08-11 20:34:46

标签: sql sql-server sql-server-2005

我有一个字符串,其中包含一个以逗号分隔的id列表,我想在where子句中使用它。

我怎样才能做到这一点?基本上我有:

set @ids = '5,8,14,5324,'

SELECT * FROM theTable WHERE Id IN (@ids)

但是@ids是一个varchar而Id是一个int。

任何想法都非常感激。

3 个答案:

答案 0 :(得分:2)

另一个选择而不是动态SQL是将@ids解析为#TempTable(解析函数的一个例子是here),然后加入它。

select *
    from theTable t1
        inner join #TempTable t2
            on t1.Id = t2.Id

或者您可以完全绕过#TempTable(以下代码假定上面链接中的解析函数)

select *
    from theTable t1
        inner join dbo.fnParseStringTSQL(@ids, ',') t2
            on t1.Id = cast(t2.string as int)

答案 1 :(得分:1)

您必须使用当前方法的动态SQL。确保您的@ids已修剪尾随逗号。

DECLARE @DynSQL NVARCHAR(2000)

SELECT @DynSQL=  'SELECT * FROM theTable WHERE Id IN ('  + @ids + ')'

EXEC  sp_executesql @DynSQL

请记住,动态SQL在自己的范围内运行。简单的选择将正常工作。

答案 2 :(得分:0)

或者您可以使用带有表变量的存储过程作为输入变量,然后加入该表以获取结果。