sql >> Databáze >  >> RDS >> Sqlserver

Název tabulky jako proměnná

U statických dotazů, jako je ten ve vaší otázce, musí být názvy tabulek a sloupců statické.

U dynamických dotazů byste měli dynamicky generovat celý SQL a k jeho provedení použít sp_executesql.

Zde je příklad skriptu používaného k porovnání dat mezi stejnými tabulkami různých databází:

Statický dotaz:

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

Protože chci snadno změnit název table a schema , vytvořil jsem tento dynamický dotaz:

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

Vzhledem k tomu, že dynamické dotazy obsahují mnoho detailů, které je třeba vzít v úvahu, a je obtížné je udržovat, doporučuji, abyste si přečetli:Prokletí a požehnání dynamického SQL



  1. MySQL Performance Cheat Sheet

  2. MariaDB JSON_SEARCH() Vysvětleno

  3. Ukládání souboru do databáze na rozdíl od systému souborů?

  4. Úvod do SQL indexů