Sql 截断链接服务器上的表失败
上下文:我需要修改本地SQL Server 2019实例上的存储过程,以远程连接到链接服务器,截断并重新填充表 我使用以下命令创建并验证链接服务器,并成功运行:Sql 截断链接服务器上的表失败,sql,sql-server,tsql,oledb,azure-data-studio,Sql,Sql Server,Tsql,Oledb,Azure Data Studio,上下文:我需要修改本地SQL Server 2019实例上的存储过程,以远程连接到链接服务器,截断并重新填充表 我使用以下命令创建并验证链接服务器,并成功运行: EXEC sp_addlinkedserver @server='PROD01' EXEC sp_linkedservers INSERT OPENQUERY([PROD01],'SELECT Purchase_Order,PO_Line_Number, Buyer_ID, Requisition_I
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]
我运行了一个测试插入,成功执行了以下操作:
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]
问题:当我尝试运行truncate语句时,会出现以下错误:
SELECT * FROM OPENQUERY ([PROD01], 'TRUNCATE TABLE [ORT].[dbo].[po_masterlist_report] SELECT "OK"' )
链接服务器“MSS-ISD-PROD01”的OLE DB提供程序“SQLNCLI10”
返回消息“无法完成延迟的准备”
无法准备Msg 8180,级别16,状态1,第1行语句
Msg 102,15级,状态1,第1行“OK”附近语法不正确
正如一位评论员所建议的,我用单引号替换了双引号,并且查询执行时没有出现错误,但是底层表没有被截断……因此查询显然没有正确执行。有人能帮我纠正这个语法吗?这样它就可以按预期截断链接的服务器表了
SELECT * FROM OPENQUERY ([PROD01], 'TRUNCATE TABLE [ORT].[dbo].[po_masterlist_report] SELECT ''OK''' )
更新文本中的问题“OK”在查询的中间做什么??我读到某个地方,需要从链接服务器查询返回任何列或一些文本…当然这可能是错误的。但请看最后的select语句。选择“确定”是无效的语法。如果您有两个单引号,而不是双引号,则需要使用select“OK”。@Sean Lange,使用两个单引号确实允许查询在没有错误的情况下运行,但当我检查基础表时,它没有被截断,因此查询在某种程度上没有正确执行:select*FROM OPENQUERY([PROD01],“TRUNCATE table[ORT].[dbo]。[采购订单主列表报告]选择“确定”)