Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Tabellennamenvariable in einer SQL-Abfrage verwenden?

Wie kann ich eine Tabellennamenvariable in einer SQL-Abfrage verwenden?

DDD
DDDOriginal
2025-01-23 06:31:09980Durchsuche

How Can I Use a Table Name Variable in a SQL Query?

Variablen als Tabellennamen verwenden

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!

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