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

Nazwa tabeli jako zmienna

W przypadku zapytań statycznych, takich jak to w pytaniu, nazwy tabel i nazwy kolumn muszą być statyczne.

W przypadku zapytań dynamicznych należy dynamicznie generować pełny kod SQL, a do jego wykonania użyć sp_executesql.

Oto przykład skryptu używanego do porównywania danych między tymi samymi tabelami w różnych bazach danych:

Zapytanie statyczne:

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

Ponieważ chcę łatwo zmienić nazwę table i schema , stworzyłem to dynamiczne zapytanie:

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

Ponieważ zapytania dynamiczne zawierają wiele szczegółów, które należy wziąć pod uwagę i są trudne do utrzymania, polecam lekturę:Przekleństwo i błogosławieństwo dynamicznego 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. Kolumny daty w SQL-Server (MSSQL-JDBC 3.0) działające w środowisku Java 1.7.0 pobrane jako 2 dni w przeszłości

  2. Jak zmienić nazwę bazy danych w SQL Server za pomocą T-SQL

  3. Wybór COUNT(*) z DISTINCT

  4. Skalarne wstawianie UDF w SQL Server 2019

  5. Narzędzia do zarządzania SQL Server 2017