Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy istnieje sposób na określenie nazwy tabeli jako ciągu?

Możesz umieścić go w instrukcji EXEC w następujący sposób:

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

Ale nie, intellisense nie zadziała w tym scenariuszu.

Jeśli z góry wiesz, jak będą wyglądać Twoje wyniki, możesz zadeklarować tabelę tymczasową do przechowywania wyników, a następnie możesz uzyskać do niej dostęp bez EXEC. Będziesz mieć intellisense na stole tymczasowym.

Na przykład:

  --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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje coś takiego jak kursor równoległy?

  2. Dlaczego CTE (Common Table Expressions) w niektórych przypadkach spowalnia zapytania w porównaniu do tabel tymczasowych w SQL Server

  3. Wydajna paginacja w SQL Server 2008 R2

  4. Jak korzystać z procedury przechowywanej „sp_server_info” w programie SQL Server?

  5. Preferowana metoda przechowywania haseł w bazie danych