Sql-Server
如何修改我現有的 T-SQL 查詢以適用於連結伺服器?
我正在使用
SQL Server 2014
,我需要修改我現有的T-SQL
查詢,以便它適用於連結伺服器。我現有的程式碼如下:
USE [MyDatabase] SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns WHERE name like '%SPA%' )
我通常使用以下方式連接到連結伺服器:
Use [MyDatabase] Select * from [xxx.xx.0.20].[LinkedDatabaseName].dbo.[TableName]
我已經嘗試過這裡給出的答案(但它仍然不起作用):無法通過連結伺服器查詢 SQL 伺服器元數據
這是我的嘗試(儘管與上面顯示的現有程式碼相比,我不太明白為什麼我需要將該點 (.) 放在 sysobjects 中):
USE [MyDatabase] SELECT name FROM [xxx.xx.0.20].[LinkedDatabaseName].sys.objects WHERE id IN ( SELECT id FROM syscolumns WHERE name like '%SPA%' )
我收到以下錯誤消息:“列名 ‘id’ 無效。”
您需要將查詢中的所有引用指向連結伺服器另一端的表。
IE:
USE [MyDatabase] SELECT name FROM [xxx.xx.0.20].[LinkedDatabaseName].sys.objects o WHERE o.object_id IN ( SELECT c.object_id FROM [xxx.xx.0.20].[LinkedDatabaseName].sys.columns c WHERE c.[name] like '%SPA%' );
您目前版本的查詢是
sys.objects
從遠端數據庫和syscolumns
目前上下文中的本地數據庫查看的。您應該避免使用
syscolumns
,因為這是一個已棄用的對象。相反,使用sys.columns
.id
您要查找的列實際上是object_id
,或者對於列 id,它是column_id
。由於您通過連結伺服器通過四部分命名直接引用數據庫,
USE [MyDatabase]
因此第一行中的 無關緊要。