错误512:子查询返回的值超过1

时间:2013-12-03 15:43:54

标签: sql sql-server sql-server-2008 tsql dynamic-sql

我有一个要求,我必须构建动态sql,其中一个输入参数是varchar(max),其中包含我需要针对bigint列验证的整数值。

SELECT @query = 'select file-id,file-Name from Files '
SELECT @Clause = 'where'
SELECT @colName = 'file-id'
SELECT @Filter = '1,2,3,4'

SELECT @sql = @query + ' ' + @Clause + ' ' + @ColName + ' IN ' + Convert(bigint,(SELECT   csvvalues from [dbo].[SplitString](@Filter,',') as s))

当我通过执行sp_executesql执行此操作时,它会抛出此错误。

returnsError#:512 | ErrorSubquery返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我在这里做错了什么。请帮助。

1 个答案:

答案 0 :(得分:4)

IN子句可以与csv或表一起使用。在调用SP_EXECUTESQL时,您只需要一个字符串来确定过滤器,因此以下内容应该有效:`

SELECT @query = 'SELECT file-id,file-Name FROM Files '
SELECT @Clause = 'WHERE'
SELECT @colName = 'file-id'
SELECT @Filter = '1,2,3,4'

SELECT @sql = @query + ' ' + @Clause + ' ' + @ColName + ' IN (' + @Filter + ')'