gpt4 book ai didi

azure - 如果预复制脚本 azure synapse 管道中存在表,如何删除表复制事件

转载 作者:行者123 更新时间:2023-12-03 06:19:29 25 4
gpt4 key购买 nike

我有一个 azure 的突触管道,如果目标表已经存在,它可以正常运行...复制事件预复制脚本是

@{concat('drop table ', item().target_schema, '.', item().target_object)}

但是我需要编辑上面的语法,首先检查表是否存在,然后仅删除表(如果存在)...下面是合法的 sql server 语法

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[myschema].[mytable]') AND type in (N'U'))DROP TABLE [myschema].[mytable]GO

正如您所看到的,我的预复制脚本已参数化,因为我的 azure synapse 分析管道正在执行这些事件:

Lookup -> ForEach -> Copy

因此预复制脚本语法也必须参数化

如何实现 IF EXISTS 逻辑并将其放入参数化预复制脚本语法中?

以下对预复制脚本的猜测...全部错误

if object_id (item().target_schema, '.', item().target_object,'U') is not null drop table item().target_schema, '.', item().target_object

以下失败

如果存在@{item().target_schema}.@{item().target_object}则删除表

有错误

"message": "ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=A database operation failed with the following error: 'Parse error at line: 1, column: 12: Incorrect syntax near 'IF'.',Source=,''Type=System.Data.SqlClient.SqlException,Message=Parse error at line: 1, column: 12: Incorrect syntax near 'IF'.,Source=.Net SqlClient Data Provider,SqlErrorNumber=103010,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=103010,State=1,Message=Parse error at line: 1, column: 12: Incorrect syntax near 'IF'.,},],'",

最佳答案

这是我的查找输出数组,我已将其提供给 ForEach。

[
{
"table_name": "one",
"schema_name": "dbo"
},
{
"table_name": "two",
"schema_name": "dbo"
}
]

我用 DROP TABLE IF EXISTS @{item().schema_name}.@{item().table_name} 重现了上述场景在复制事件的预复制脚本中执行命令并得到相同的错误。

enter image description here

我在 synapse SQL 数据库中尝试了相同的命令,但最终出现了相同的错误。

enter image description here

据此Documentation ,此错误的原因可能是上述命令仅适用于SQL Server不适用于SQL DW

The following guesses for the pre-copy script ... all error out

if object_id (item().target_schema, '.', item().target_object,'U') is not null drop table item().target_schema, '.', item().target_object

我可以通过使用上述命令的字符串插值来删除预复制脚本中的表,如下所示。

if object_id ('@{item().schema_name}.@{item().table_name}','U') is not null drop table @{item().schema_name}.@{item().table_name};

enter image description here

enter image description here

关于azure - 如果预复制脚本 azure synapse 管道中存在表,如何删除表复制事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76007457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com