Bağlı sunucu sorgusuna değişken geçirme

Bu makalede, bağlı sunucu sorgusuna değişken geçirme açıklanmaktadır.

Orijinal ürün sürümü: SQL Server Books Online
Özgün KB numarası: 314520

Özet

Bağlı bir sunucuyu sorguladığınızda, sık sık , OPENROWSETveya OPENDATASOURCE deyimini OPENQUERYkullanan bir geçiş sorgusu gerçekleştirirsiniz. Önceden tanımlanmış Transact-SQL dizelerini kullanarak bunu nasıl yapacağınızı görmek için SQL Server Books Online'daki örnekleri görüntüleyebilirsiniz, ancak bu işlevlere değişken geçirmenin bir örneği yoktur. Bu makalede, bağlı sunucu sorgusuna değişken geçirmenin üç örneği verilmiştir.

Geçiş işlevlerinden birine değişken geçirmek için dinamik bir sorgu oluşturmanız gerekir.

Tırnak işaretleri içeren tüm verilerin belirli bir işlemeye ihtiyacı vardır.

Temel değerleri geçirme

Temel Transact-SQL deyimi biliniyorsa ancak bir veya daha fazla belirli değer geçirmeniz gerektiğinde aşağıdaki örneğe benzer bir kod kullanın:

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)

Sorgunun tamamını geçirme

Transact-SQL sorgusunun tamamını veya bağlı sunucunun adını (veya her ikisini) geçirmeniz gerektiğinde, aşağıdaki örneğe benzer bir kod kullanın:

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)

Sp_executesql saklı yordamını kullanma

Çok katmanlı tırnaklardan kaçınmak için aşağıdaki örneğe benzer bir kod kullanın:

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

Ayrıca Bkz

Daha fazla bilgi için, aşağıdaki konulara bakın: