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

Име на таблица като променлива

За статични заявки, като тази във вашия въпрос, имената на таблици и колони трябва да са статични.

За динамични заявки трябва да генерирате динамично пълния SQL и да използвате sp_executesql, за да го изпълните.

Ето пример за скрипт, използван за сравняване на данни между едни и същи таблици от различни бази данни:

Статична заявка:

SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]

Тъй като искам лесно да променя името на table и schema , създадох тази динамична заявка:

declare @schema varchar(50)
declare @table varchar(50)
declare @query nvarchar(500)

set @schema = 'dbo'
set @table = 'ACTY'

set @query = 'SELECT * FROM [DB_ONE].[' + @schema + '].[' + @table + '] EXCEPT SELECT * FROM [DB_TWO].[' + @schema + '].[' + @table + ']'

EXEC sp_executesql @query

Тъй като динамичните заявки имат много подробности, които трябва да се вземат предвид и са трудни за поддържане, препоръчвам ви да прочетете:Проклятието и благословиите на динамичния SQL



  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. Проактивни проверки на състоянието на SQL Server, част 2:Поддръжка

  3. Преобразуване на ‘time’ в ‘datetime2’ в SQL Server (T-SQL примери)

  4. Защо изпълнението на съхранени процедури е по-бързо от SQL заявката от скрипт?

  5. Създаване на база данни програмно в SQL Server