Sql-Server

如何從連結伺服器上的表中刪除行

  • December 11, 2018

我需要從具有相同架構的多個伺服器上的多個數據庫中的表中刪除行。OPENROWSET()似乎不是答案。

如果我這樣做:

SET @sqlStr = '
   SELECT TOP 0 * FROM OPENROWSET(''SQLNCLI'', ''Server=' + @Server + ';Trusted_Connection=yes;'',
       ''DELETE FROM [' + @DBName + '].dbo.tblName WHERE foo='bar') AS a';
EXEC (@sqlStr);

我得到錯誤

Msg 11525, Level 16, State 1, Procedure sp_describe_first_result_set, Line 1
The metadata could not be determined because statement 'DELETE FROM  . . .

如果我添加SELECT 1;到查詢中以便像下面那樣返回結果集,我會得到一行一列的結果(其值是 BTW 而不是“1”)。但是,沒有發生刪除操作。

SET @sqlStr = '
   SELECT TOP 0 * FROM OPENROWSET(''SQLNCLI'', ''Server=' + @Server + ';Trusted_Connection=yes;'',
       ''SELECT 1; DELETE FROM [' + @DBName + '].dbo.tblName WHERE foo='bar') AS a';
EXEC (@sqlStr);

我需要什麼才能在連結伺服器上進行刪除?

為什麼不只是:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'DELETE [' + @DBName + '].dbo.tblname WHERE foo = ''bar'';';
EXEC linkedserver...sp_executesql @sql;

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