我试图编写一个存储过程来截断数据仓库中的第一个表,然后将数据从本地数据库复制到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。
服务器已经链接,所以这不是问题,但我很好奇为什么这不起作用。
答案 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 *。