#azure-data-factory-2
#azure-data-factory-2
Вопрос:
Я пытаюсь отправить дату последнего обновления в свою контрольную таблицу. Я следую инструкциям Msft для выполнения дополнительных загрузок, но получаю сообщение об ошибке при вызове сохраненного процесса с датой последнего обновления.
Я могу вставлять значения в столбец водяных знаков с помощью простого оператора insert, но при использовании сохраненной процедуры всегда происходит сбой. Я получаю сообщение об ошибке:
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.
Комментарии:
1. Используете ли вы Azure SQL?
2. Привет @Cobus van Rooyen, пожалуйста, поправьте меня, если я неправильно понял вас в ответе.
Ответ №1:
Это синтаксическая ошибка при выполнении хранимой процедуры, а не проблема с форматом даты. Почему вы добавляете скобки? Я имею в виду , что тебе нужно переодеться 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'
Комментарии:
1. Спасибо, Джозеф. Проблема заключалась в скобках. Спасибо за все ваши усилия по тестированию вашего решения