Sql server 将逗号分隔的值传递给sp_executesql
我试图通过传递CSV参数来使用sp_executesql 当我通过传递构造的字符串来使用EXEC时,它会返回一些数据Sql server 将逗号分隔的值传递给sp_executesql,sql-server,sql-server-2014,dynamic-sql,sp-executesql,Sql Server,Sql Server 2014,Dynamic Sql,Sp Executesql,我试图通过传递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, ',', ''',
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
我找不到这个方法有什么问题,如果你按照下面的方式更改语句,它将得到结果。 为了达到某种目的,你也可以使用charindex或split
set @sql = 'EXEC(''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
查林德斯:
declare @Accts nvarchar(100) = 'IntYTD,TotalIncome,PayoffYTD'
select sum(TotalBalanceMTD) from #rptGL where charindex(','+FieldName+',',','+@Accts+',')>0 group by FieldName
IN不接受参数,sp_executesql不进行文本替换。第一个查询动态构造整个查询。第二个函数尝试将子句作为参数传递,但这不会成功。描述了基本问题,以及本例中的解决方案,TVP可能会做得很好。@Jeroemostert,我不知道它的局限性。我尝试使用分割函数或任何其他解决方法。非常感谢。感谢您的回答,但我的目的是展示sp_executesql与EXEC的用法。此外,SPLIT仅在2016年提供,我在2014年提供。无论如何,谢谢你的回复。我会等别人看我是否能得到一个接近我需要的答案