Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u een variabele doorgeeft aan een gekoppelde serverquery.
Oorspronkelijke productversie: SQL Server Books Online
Oorspronkelijk KB-nummer: 314520
Samenvatting
Wanneer u een query uitvoert op een gekoppelde server, voert u vaak een passthrough-query uit die gebruikmaakt van de OPENQUERY, OPENROWSETof OPENDATASOURCE instructie. U kunt de voorbeelden in SQL Server Books Online bekijken om te zien hoe u dit doet met behulp van vooraf gedefinieerde Transact-SQL-tekenreeksen, maar er zijn geen voorbeelden van het doorgeven van een variabele aan deze functies. Dit artikel bevat drie voorbeelden van het doorgeven van een variabele aan een gekoppelde serverquery.
Als u een variabele wilt doorgeven aan een van de passthrough-functies, moet u een dynamische query bouwen.
Alle gegevens die aanhalingstekens bevatten, hebben een specifieke verwerking nodig.
Basiswaarden doorgeven
Wanneer de eenvoudige Transact-SQL-instructie bekend is, maar u een of meer specifieke waarden moet doorgeven, gebruikt u code die vergelijkbaar is met het volgende voorbeeld:
DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)
De hele query doorgeven
Wanneer u de hele Transact-SQL-query of de naam van de gekoppelde server (of beide) moet doorgeven, gebruikt u code die vergelijkbaar is met het volgende voorbeeld:
DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)
De Sp_executesql opgeslagen procedure gebruiken
Gebruik code die vergelijkbaar is met het volgende voorbeeld om de aanhalingstekens met meerdere lagen te voorkomen:
DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR
Zie ook
Zie de volgende onderwerpen voor meer informatie: