sql >> Database >  >> RDS >> Sqlserver

Een tabelnaam als variabele

Voor statische zoekopdrachten, zoals die in uw vraag, moeten tabelnamen en kolomnamen statisch zijn.

Voor dynamische query's moet u de volledige SQL dynamisch genereren en sp_executesql gebruiken om deze uit te voeren.

Hier is een voorbeeld van een script dat wordt gebruikt om gegevens tussen dezelfde tabellen van verschillende databases te vergelijken:

Statische zoekopdracht:

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

Omdat ik de naam van table gemakkelijk wil veranderen en schema , Ik heb deze dynamische zoekopdracht gemaakt:

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

Aangezien dynamische query's veel details hebben waarmee rekening moet worden gehouden en ze moeilijk te onderhouden zijn, raad ik u aan te lezen:De vloek en zegeningen van dynamische SQL



  1. Hoe de functie Degrees() werkt in PostgreSQL

  2. Hoe een dubbele sleutelfout in T-SQL (SQL Server) te negeren

  3. Operator bestaat niet:geheel getal =? bij gebruik van Postgres

  4. Stuurprogramma JDBC PostgreSQL met Android