Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich Tabellenvariablen an dynamische SQL-Anweisungen in SQL Server?

Wie übergebe ich Tabellenvariablen an dynamische SQL-Anweisungen in SQL Server?

Linda Hamilton
Linda HamiltonOriginal
2025-01-10 16:54:44515Durchsuche

How to Pass Table Variables to Dynamic SQL Statements 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:

  • Tabellenvariable „@RelPro“ muss deklariert werden.
  • Tabellenvariable „@TSku“ muss deklariert werden.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn