1
我試圖通過傳遞CSV參數來使用sp_executesql。將逗號分隔值傳遞給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'不會做文本替換。你的第一個查詢動態地構造整個查詢。第二次嘗試將該子句作爲參數傳遞,但不會飛。基本問題在這裏描述(https://stackoverflow.com/questions/337704/),以及解決方案(在這種情況下,TVP可能會很好地完成)。 –
[在此處使用子查詢中的拆分函數的另一個解決方案](https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a8770fa9-6230-41d0-883f-947796db421c/use-parameterized-spexecutesql- with-in-clause?forum = transactsql) – JNevill
@JeroenMostert,我沒有意識到這個限制。我嘗試使用拆分功能或任何其他解決方法。謝謝! – FLICKER