Sql-Server

針對連結伺服器的 DELETE 查詢發出錯誤

  • September 3, 2013

我有一個查詢是更大程序的一部分,並針對連結伺服器執行。

程式碼是這樣的:

DELETE FROM [LinkServerIP].[Database].[dbo].[TableName]
WHERE NOT EXISTS (
   SELECT * 
   FROM [LinkServerIP].[Database].[dbo].[AnotherTableName] t 
   WHERE t.[Code]=[LinkServerIP].[Database].[dbo].[TableName].[Code]
);

現在,當我執行它時,我得到:

消息 4104,級別 16,狀態 1,過程 xxxx,第 113 行無法綁定多部分標識符“LinkServerIP.Database.dbo.TableName.Code”。

有任何想法嗎?

只需使用允許您定義別名的語法:

DELETE t1 FROM Server.Database.dbo.Table1 AS t1
WHERE NOT EXISTS 
(
 SELECT 1 FROM Server.Database.dbo.Table2 AS t2
 WHERE t2.Code = t1.Code
);

或者您可以使用動態 SQL 來簡化:

DECLARE @sql NVARCHAR(MAX) = N'DELETE t1 FROM dbo.Table1 AS t1
 WHERE NOT EXISTS
 (
   SELECT 1 FROM dbo.Table2 AS t2
   WHERE t2.Code = t1.Code
 );';

EXEC Server.Database..sp_executesql @sql;

這會強制查詢在另一端執行,這也可以提供其他好處……

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