SQL Server:在远程服务器上运行存储的过程以删除数据

时间:2018-06-20 16:34:33

标签: sql-server

我无法在远程服务器上运行SQL Server存储过程。

我有两个服务器,每个服务器都运行SQL Server,每个服务器都有名称和表结构相同的数据库。我想从另一台服务器上截断或删除一个服务器上的表。当我在一个服务器上尝试使用这是一个SQL脚本时,出现错误,说明表的级别太多(server.database.dbo.tablename)。

仅允许两个级别进行放置或截断。我可以在表上进行删除,但是这需要很长时间,因为表中有很多行。

所以我想到了在远程服务器上运行存储过程。我运行了远程存储过程,但它认为我想删除/截断具有相同名称和本地服务器上的数据库的表。我尝试了多种方法在存储过程中引用远程服务器,但是仍然更改了本地表。

这是当前存在的存储过程。对我在做什么有任何想法吗?有其他想法可以做到这一点吗?

USE [PetroFlatTransfer]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[DropTransferTables] 
    (@State VARCHAR(2))
AS
    DECLARE @TableName VARCHAR(MAX);
    DECLARE @SQL VARCHAR(MAX);

    SET @TableName = '[sv9127].[PetroFlatTransfer].[dbo].[' + @State +'_ProductionHistory]';
    PRINT(@TableName);

    SET @SQL = 'TRUNCATE TABLE ' +  @TableName
    PRINT(@SQL);
    EXEC (@SQL);
GO

1 个答案:

答案 0 :(得分:0)

尝试 要更新其他数据库不同的服务器,您可以执行连接字符串

使用 OPENQUERY(Transact-SQL) http://technet.microsoft.com/en-us/library/ms188427.aspx

连接OPENDATASOURCE http://technet.microsoft.com/en-us/library/ms179856.aspx

  • 权限...

您也可以使用 sp_addlinkedserver(Transact-SQL)
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql?view=sql-server-2017

或创建链接服务器(SQL Server数据库引擎)

https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine?view=sql-server-2017