azure-data-factory-2 - Azure 数据工厂增量加载 - 水印问题
问题描述
我正在尝试将上次更新日期发送到我的控制表。我按照 Msft 指南进行增量加载,但在使用上次更新日期调用存储过程时出错。
我可以使用简单的插入语句将值插入水印列,但使用存储过程时总是失败。我得到的错误信息是:
SQL Error [102] [S0001]: Incorrect syntax near '1/1/2010 12:00:00 AM'.
表定义:
CREATE TABLE Admin.dbo.Data_Load_Params (
Identifier varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
Source_Table varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
Target_Table varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
Table_Type varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
Last_Update_Column varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
Schedule varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
Watermark datetime NULL
) GO;
我的存储过程:
CREATE PROCEDURE USP_WriteWatermarkValue (@WatermarkValue datetime, @TableName varchar(50))
AS
BEGIN
UPDATE Data_Load_Params
SET [Watermark] = @WatermarkValue
WHERE [Target_Table] = @TableName
END
然后我运行:
exec USP_Write_Watermark('2020-12-09T17:16:15Z', 'Journal_Headers')
但也使用了日期的变体,例如:
exec USP_Write_Watermark('1/1/2010 12:00:00 AM', 'Journal_Headers')
这个问题让我发疯了,因为我什至从 Msft 文档中复制了示例代码。
解决方案
执行存储过程时出现语法错误,而不是日期格式的问题。为什么要加括号?我的意思是您需要更改exec USP_Write_Watermark('2020-12-09T17:16:15Z', 'Journal_Headers')
为exec USP_Write_Watermark '2020-12-09T17:16:15Z', 'Journal_Headers'
.
我创建了一个测试来验证它。
CREATE TABLE [dbo].[person](
[PersonID] [int] NULL,
[Name] [varchar](20) NULL,
[LastModifytime] [datetime] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[person]
(PersonID, Name, LastModifytime)
VALUES
(1, 'aaaa','9/1/2017 12:56:00 AM'),
(2, 'bbbb','9/2/2017 5:23:00 AM'),
(3, 'cccc','9/3/2017 2:36:00 AM'),
(4, 'dddd','9/4/2017 3:21:00 AM'),
(5, 'eeee','9/5/2017 8:06:00 AM');
select * from [dbo].[person];
CREATE TABLE [dbo].[watermarktable](
[WatermarkValue] [datetime] NULL,
[Target_Table] varchar(255)
) ON [PRIMARY]
INSERT INTO watermarktable
VALUES ('1/1/2010 12:00:00 AM','dbo.person')
select * from [dbo].[watermarktable]
create PROCEDURE [dbo].[update_watermark] @WatermarkValue datetime, @TableName varchar(255)
AS
BEGIN
UPDATE dbo.watermarktable
SET [WatermarkValue] = @WatermarkValue
WHERE [Target_Table] = @TableName
END
GO
exec [dbo].[update_watermark] '2020-12-09T17:16:15Z', 'dbo.person'
exec [dbo].[update_watermark] '1/1/2010 12:00:00 AM', 'dbo.person'
推荐阅读
- swift - 如何撤消 iOS 11 中的透明导航栏?
- r - 如何通过唯一 ID 聚合数据框中的某些列?
- asp.net - IIS 无法通过域访问页面
- java - 如何在这个 Java 游戏中进行循环?
- sql - 将一列的每个唯一值分成多列,然后显示在单行中
- ios - 链接lottie-ios后编译出错
- c++ - 在 Base* 数据结构中格式化和使用派生类的正确方法是什么?
- javascript - 如何声明一个带有“+”或“-”符号的变量?Javascript
- javascript - 无法使用 Angular 6 在按钮单击时加载动态图像
- python - 使用 tf.data 的初始 v3?