Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich Tabellenvariablen an dynamische SQL-Anweisungen in SQL Server?
Übergabe von Tabellenvariablen an dynamische SQL-Anweisungen in SQL Server
Beim Erstellen gespeicherter Prozeduren kann es vorkommen, dass Sie auf die Herausforderung stoßen, in dynamischen SQL-Anweisungen auf deklarierte Tabellenvariablen zu verweisen. Dies kann zu einem Fehler führen, der besagt, dass die Variable deklariert werden muss.
Betrachten Sie das folgende Beispiel:
<code class="language-sql">set @col_name = 'Assoc_Item_' + Convert(nvarchar(2), @curr_row1); set @sqlstat = 'update @RelPro set ' + @col_name + ' = (Select relsku From @TSku Where tid = ' + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' + Convert(nvarchar(2), @curr_row); Exec(@sqlstat);</code>
Das Ausführen dieser Anweisung kann zu folgendem Fehler führen:
Um dieses Problem zu lösen, können Tabellenwertparameter (TVPs) verwendet werden. TVP ermöglicht die Übergabe von Tabellenvariablen an dynamische SQL-Anweisungen, ohne diese explizit zu deklarieren. Bitte beachten Sie jedoch: Mit dieser Methode können Werte in der Tabelle nicht aktualisiert werden.
Betrachten Sie beispielsweise den folgenden geänderten Code:
<code class="language-sql">CREATE TYPE MyTable AS TABLE ( Foo int, Bar int ); GO DECLARE @T AS MyTable; INSERT INTO @T VALUES (1,2), (2,3) SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T EXEC sp_executesql N'SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T', N'@T MyTable READONLY', @T=@T </code>
Dieser Code zeigt, dass die Tabellenvariable, auf die im Unterbereich (innerhalb der dynamischen Anweisung) verwiesen wird, mit der Tabellenvariablen im äußeren Bereich übereinstimmt, wodurch der Fehler vermieden wird. Der Schlüssel liegt darin, sp_executesql
zu verwenden und TVP-Typen und -Parameter korrekt zu deklarieren. Für Aktualisierungsvorgänge ist ein anderer Ansatz erforderlich, beispielsweise die Verwendung von Cursorn oder anderen Alternativen.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Tabellenvariablen an dynamische SQL-Anweisungen in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!