【发布时间】:2023-03-30 12:24:01
【问题描述】:
我正在尝试通过传递 CSV 参数来使用 sp_executesql。
当我通过传递构造字符串使用 EXEC 时,它会返回一些数据
declare @Accts nvarchar(100) = 'IntYTD,TotalIncome,PayoffYTD'
declare @sql nvarchar(max)
set @sql = 'select sum(TotalBalanceMTD) from rptGL where FieldName in (''' + replace(@Accts, ',', ''',''') + ''') group by FieldName'
exec (@sql)
但是当我使用 sp_executesql 并将 @Accts 作为参数传递时,它不返回任何数据。
set @sql = 'select sum(TotalBalanceMTD) from rptGL where FieldName in (@values) group by FieldName'
declare @v nvarchar(max) = '''' + replace(@Accts, ',', ''',''') + ''''
exec sp_executesql @sql, N'@values varchar(max)', @values = @v
我找不到这个方法有什么问题
【问题讨论】:
-
IN不带参数,sp_executesql不进行文本替换。您的第一个查询动态构建整个查询。第二个尝试将子句作为参数传递,但这不会飞。 here 描述了基本问题以及解决方案(在这种情况下,TVP 可能会做得很好)。 -
@JeroenMostert,我不知道这个限制。我尝试使用拆分功能或任何其他解决方法。谢谢!
标签: sql-server sql-server-2014 dynamic-sql sp-executesql