Sql-Server

如何修改我現有的 T-SQL 查詢以適用於連結伺服器?

  • June 30, 2021

我正在使用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]因此第一行中的 無關緊要。

引用自:https://dba.stackexchange.com/questions/295055