sql >> Databasteknik >  >> RDS >> Sqlserver

Finns det något sätt att ange tabellnamn som en sträng?

Du kan slå in det i en EXEC-sats så här:

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

Men nej, intellisense fungerar inte i det scenariot.

Om du vet hur din utdata kommer att se ut i förväg kan du deklarera en temptabell för att hålla resultaten, och sedan kan du komma åt det utan EXEC. Du kommer att ha intellisense på tempbordet.

Till exempel:

  --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. Konvertera 'smalldatetime' till 'date' i SQL Server (T-SQL-exempel)

  2. Forward ingenjör gör ingenting i MySQL Workbench

  3. Spring Boot Query-anteckning med nativeQuery fungerar inte i Postgresql

  4. Infoga med PreparedStatement. Hur ökar jag ID automatiskt?