Database name ‘%.*ls’ ignored, referencing object in tempdb

B sunucusu üzerinde linked server olarak tanımlanmış A sunucusunda DB1 isimli veritabanında oluşturduğumuz T1 tablosuna linked server konulu makalemizde anlattığımız gibi 4 parçalı tanımlayıcı (4-parts identifier) kullanarak aşağıdaki gibi ulaşabiliriz.
Linkedserver.database.schema_name.object_name
A.DB1.dbo.T1
Fakat A sunucu üzerinde oluşturduğumuz geçici tablolara (temporary tables) erişmek bu kadar kolay olmamaktadır. Örneğin sunucu üzerinde oluşturduğumuz ##T1 isimli global geçici tabloya erişmek için SELECT * FROM A.tempdb.dbo.##T1 yazım biçimiyle erişebileceğimizi düşünürken aşağıdaki hatayla karşılıyoruz.
Database name ‘tempdb’ ignored, referencing object in tempdb.
Oysa aşağıdaki gibi tempdb altındaki nesnelere baktığımızda tabloyu görebiliyoruz fakat tempdb’nin yapısından dolayı nesnelere erişemiyoruz.

SELECT * FROM A.tempdb.sys.sysobjects
WHERE type = 'U'

Bunun için en iyi yöntem OPENQUERY fonksiyonunu kullanmaktır.

SELECT * INTO #t1 FROM OPENQUERY(A, 'SELECT * FROM ##T')

OPENQUERY fonksiyonuyla ilgili daha geniş bilgi için SQL Server Linked Server (Bağlı Sunucu) yazısı okunabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir