sql >> Databasteknik >  >> RDS >> Sqlserver

Ett tabellnamn som en variabel

För statiska frågor, som den i din fråga, måste tabellnamn och kolumnnamn vara statiska.

För dynamiska frågor bör du generera hela SQL dynamiskt och använda sp_executesql för att köra den.

Här är ett exempel på ett skript som används för att jämföra data mellan samma tabeller i olika databaser:

Statisk fråga:

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

Eftersom jag enkelt vill ändra namnet på table och schema , Jag har skapat den här dynamiska frågan:

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

Eftersom dynamiska frågor har många detaljer som måste beaktas och de är svåra att underhålla rekommenderar jag att du läser:The curse and blessings of dynamic SQL



  1. DAY() Exempel i SQL Server (T-SQL)

  2. PostgreSQL - FEL:kolumndatum kan inte skickas till typdatum

  3. 25 Microsoft Access-genvägar för att spara tid i tabeller i databladsvy

  4. Oväntad variabeltyp som returneras av Receive-Job