Frage:
Wenn Sie versuchen, eine Abfrage mit einem in einer Variablen gespeicherten Tabellennamen (z. B. „@tablename“) auszuführen, erhalten Sie eine Fehlermeldung, die besagt, dass die Tabellenvariable „@tablename“ deklariert werden muss.
Lösung:
In einer statischen Abfrage wie der in der Frage gezeigten müssen die Tabellen- und Spaltennamen statisch sein. Bei dynamischen Abfragen mit dynamisch gefüllten Tabellennamen muss das komplette SQL dynamisch generiert und mit sp_executesql
ausgeführt werden.
Beispiel:
Angenommen, wir möchten Daten aus derselben Tabelle in verschiedenen Datenbanken vergleichen. Eine statische Abfrage sieht so aus:
<code class="language-sql">SELECT * FROM [DB_ONE].[dbo].[ACTY] EXCEPT SELECT * FROM [DB_TWO].[dbo].[ACTY]</code>
Um diese Abfrage dynamisch zu gestalten, können Schema und Tabellenname als Variablen festgelegt werden:
<code class="language-sql">declare @schema sysname; declare @table sysname; declare @query nvarchar(max); set @schema = 'dbo'; set @table = 'ACTY'; set @query = ' SELECT * FROM [DB_ONE].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + ' EXCEPT SELECT * FROM [DB_TWO].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table); EXEC sp_executesql @query;</code>
Mithilfe von sp_executesql
kann dynamisch generiertes SQL ausgeführt werden.
Weitere Hinweise:
Dynamische Abfragen erfordern sorgfältige Überlegung und Wartung. Es wird empfohlen, sich mit den Details von dynamischem SQL vertraut zu machen, bevor Sie solche Abfragen in Ihren Code implementieren.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Tabellennamenvariable in einer SQL-Abfrage verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!