我有一个要求,我必须构建动态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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我在这里做错了什么。请帮助。
答案 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 + ')'