Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt es eine Möglichkeit, den Tabellennamen als Zeichenfolge anzugeben?

Sie können es wie folgt in eine EXEC-Anweisung packen:

declare @my_tablename nvarchar(100) = 'mytable';
exec('
SELECT * FROM 
(
  SELECT * FROM 
  (
    SELECT * FROM ' + @my_tablename + '
  )
  INNER JOIN ' + @my_tablename + ' ON ...'
);

Aber nein, Intellisense funktioniert in diesem Szenario nicht.

Wenn Sie im Voraus wissen, wie Ihre Ausgabe aussehen wird, können Sie eine temporäre Tabelle für die Ergebnisse deklarieren, auf die Sie dann ohne EXEC zugreifen können. Sie haben Intellisense in der temporären Tabelle.

Zum Beispiel:

  --this must match whatever your SELECT is going to return
  CREATE TABLE #results(
    FIELD1 INT
   ,FIELD2 NVARCHAR(100)
   ,FIELD3 BIT
   );

EXEC('
  INSERT INTO #results(field1,field2,field3)
  SELECT FIELD1,FIELD2,FIELD3 FROM ' + @my_tablename
);

select * from #results  --you will have intellisense on #results