上下文:我需要修改本地 SQL Server 2019 实例上的存储过程,以远程连接到链接服务器以截断并重新填充表。
我创建并验证以下链接服务器,成功运行:
EXEC sp_addlinkedserver @server='PROD01'
EXEC sp_linkedservers
我使用以下成功执行的测试插入:
INSERT OPENQUERY([PROD01],'SELECT Purchase_Order,PO_Line_Number,
Buyer_ID,
Requisition_ID,
Item_ID,
Item_Revision_ID,
PO_Line_Description,
Order_Quantity,
RECV_Qty,
Due_Date,
Original_Due_Date,
Todays_Status,
Delivery_Status,
Vendor_Name,
Requisitioner,
Level_1_Project_Name,
Inventory_Abbreviation_Code,
[Acknowledgment_Required_Flag YN],
Acknowledgment_Date,
REL_TO_VEND_DT,
Order_Date,
Purchase_Order_Line_Type,
Last_Update
FROM [ORT].[dbo].[po_masterlist_report]')
--Local server instance below
SELECT Purchase_Order,
PO_Line_Number,
Buyer_ID,
Requisition_ID,
Item_ID,
Item_Revision_ID,
PO_Line_Description,
Order_Quantity,
RECV_Qty,
Due_Date,
Original_Due_Date,
Todays_Status,
Delivery_Status,
Vendor_Name,
Requisitioner,
Level_1_Project_Name,
Inventory_Abbreviation_Code,
[Acknowledgment_Required_Flag YN],
Acknowledgment_Date,
REL_TO_VEND_DT,
Order_Date,
Purchase_Order_Line_Type,
[Last_Update]
FROM [20Z2\SQLEXPRESS].[co_sb].[dbo].[po_masterlist_report]
问题:当我尝试运行截断语句时,我会引发以下错误:
SELECT * FROM OPENQUERY ([PROD01], 'TRUNCATE TABLE [ORT].[dbo].[po_masterlist_report] SELECT "OK"' )
链接服务器“MSS-ISD-PROD01”的 OLE DB 提供程序“SQLNCLI10”返回消息“延迟准备无法完成。”。
Msg 8180,Level 16, State 1, Line 1 Statement(s) 无法准备。
消息 102,级别 15,状态 1,第 1 行 'OK' 附近的语法不正确。
正如评论者所建议的那样,我用单引号替换了双引号,查询执行时没有错误,但基础表没有被截断......所以查询显然没有正确执行。有人可以帮我更正这个语法,以便它按预期截断链接服务器表吗?
SELECT * FROM OPENQUERY ([PROD01], 'TRUNCATE TABLE [ORT].[dbo].[po_masterlist_report] SELECT ''OK''' )