Ich versuche sp_executesql zu verwenden, indem ich CSV-Parameter übergebe.Übergabe von durch Komma getrennten Werten an sp_executesql
Wenn ich exec durch konstruierte String übergeben, gibt sie mir ein paar Daten
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)
Aber wenn ich sp_executesql verwenden und die @Accts als Parameter übergeben werden, gibt es keine Daten.
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
Ich kann nicht finden, was mit dieser Methode falsch ist
'IN' keine Parameter übernehmen und' sp_executesql' nicht textlichen Austausch tun. Ihre erste Abfrage erstellt die gesamte Abfrage dynamisch. Der zweite Versuch, die Klausel als Parameter zu übergeben, wird jedoch nicht fliegen. Das grundlegende Problem wird beschrieben [hier] (https://stackoverflow.com/questions/337704/), zusammen mit Lösungen (in diesem Fall könnte ein TVP gut tun). –
[Eine andere Lösung, die hier eine Unterfunktion in einer Unterabfrage verwendet] (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a8770fa9-6230-41d0-883f-947796db421c/use-parameterized-sexecutesql- with-in-clause? forum = transactsql) – JNevill
@ JeroenMostert, mir war die Einschränkung nicht bewusst. Ich versuche, Split-Funktion oder eine andere Problemumgehung zu verwenden. Vielen Dank! – FLICKER