sql >> Databáze >  >> RDS >> Sqlserver

Existuje způsob, jak zadat název tabulky jako řetězec?

Můžete jej zabalit do příkazu EXEC takto:

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

Ale ne, intellisense v tomto scénáři nebude fungovat.

Pokud předem víte, jak bude váš výstup vypadat, můžete deklarovat dočasnou tabulku pro uložení výsledků a pak k ní můžete přistupovat bez EXEC. Na dočasném stole budete mít inteligenci.

Například:

  --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


  1. Získejte počty všech tabulek ve schématu

  2. Efektivní spojování přes intervaly v SQL

  3. ORA-00913:příliš mnoho hodnot při použití případu kdy

  4. Oracle INSERT do dvou tabulek v jednom dotazu