我有一个将从逗号分隔的字符串返回整数值的函数,它需要两个参数(@string nvarchar(4000),@ delimiter char(1))。所以问题是如果我在动态查询中使用此函数,我会报错,这是查询
declare @ProductIDs varchar(11) declare @SQL varchar(max) set @ProductIDs='1,2,3,4' declare @query varchar(max) --set @query= @ProductIDs +','+@Delimiter SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('+ @ProductIDs +' , '','')' Exec(@SQL)
我收到错误消息程序或函数dbo.fnDelimitedStringToTable指定了太多参数。
当您构建像这样的动态SQL时,您需要将参数用双引号引起来 ''
''
declare @ProductIDs varchar(11) declare @SQL varchar(max) set @ProductIDs='1,2,3,4' declare @query varchar(max) --set @query= @ProductIDs +','+@Delimiter SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('''+ @ProductIDs +''' , '','')' Exec(@SQL)
这样,SQL语句将为:
SELECT val FROM dbo.[fnDelimitedStringToTable]('1,2,3,4' , '','')
并不是:
SELECT val FROM dbo.[fnDelimitedStringToTable](1,2,3,4 , '','')