Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将逗号分隔的值传递给sp_executesql_Sql Server_Sql Server 2014_Dynamic Sql_Sp Executesql - Fatal编程技术网

Sql server 将逗号分隔的值传递给sp_executesql

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, ',', ''',

我试图通过传递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

我找不到这个方法有什么问题,如果你按照下面的方式更改语句,它将得到结果。 为了达到某种目的,你也可以使用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年提供。无论如何,谢谢你的回复。我会等别人看我是否能得到一个接近我需要的答案