Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Има ли начин да посочите името на таблицата като низ?

Можете да го опаковате в израз EXEC по следния начин:

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

Но не, intellisense няма да работи в този сценарий.

Ако знаете как ще изглежда изходът ви предварително, тогава можете да декларирате временна таблица, която да съхранява резултатите, и след това можете да получите достъп до нея без EXEC. Ще имате intellisense на временната таблица.

Например:

  --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. Не мога да стартирам браузъра на SQL Server

  2. Техническо сравнение:Microsoft Access 2016 срещу SQL Server 2016

  3. Единична или множество бази данни

  4. Преобразувайте ISO форматирана дата в DATETIME

  5. Услугата не е напълно спряна след ServiceController.Stop()