我无法在远程服务器上运行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
答案 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数据库引擎)