问题是在链接服务器上截断表

时间:2017-09-27 15:15:49

标签: sql-server stored-procedures

我试图编写一个存储过程来截断数据仓库中的第一个表,然后将数据从本地数据库复制到DWH服务器。

以下是代码:

USE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML];
GO

TRUNCATE TABLE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML];
GO

SELECT *
INTO [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML]
FROM [14TPAWNDB001].[FLMedicaid].[dbo].[PML]  
GO

我得到的回应是:

  

Msg 911,Level 16,State 1,Line 1
  数据库' ARGTPAWN-DB-DWH'不存在。确保正确输入名称。

     

Msg 4701,Level 16,State 1,Line 3
  找不到对象" PML"因为它不存在或您没有权限。

     

Msg 117,Level 15,State 1,Line 7
  对象名称' ARGTPAWN-DB-DWH.DWH.dbo.PML'包含超过最大前缀数。最大值为2。

服务器已经链接,所以这不是问题,但我很好奇为什么这不起作用。

3 个答案:

答案 0 :(得分:1)

链接服务器和分布式查询在性能方面可能很棘手......

您应该考虑在承载目标表的数据库上编写存储过程,即使您从承载源表的数据库中调用它也是如此。

在目标数据库上:

l[4]

从源端(或从目标端)调用目标端PS并完成,但源端数据库必须链接到目标端数据库。 由于DROP / CREATE / INSERT序列,可以删除事务。

您可以在源端执行oposite:PS,在链接的目标服务器数据库上使用drop和insert,但您必须知道: - 交易需要一段时间。 - 在整个过程中将锁定所有源数据。 - INSERT需要一段时间。

答案 1 :(得分:0)

您无需执行:

USE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML];

只需执行以下行。

答案 2 :(得分:0)

什么是ARGTPAWN-DB-DWH?如果这是服务器名称,则不需要它。

您的USE语句应仅引用数据库。

您的SELECT * INTO...将尝试创建表PML,如果已存在(如果您执行截断,它将会失败)它将失败 - 使用INSERT INTO...DROP TABLE...代替截断。

请勿使用SELECT *。