当我在 Azure Synapse SQL Server 中隐式创建表时,我看到以下错误:
解析错误位于行:2,列:
124:
“350”附近的语法不正确。
这是引发错误的脚本。
CREATE TABLE temp.test_table
WITH (DISTRIBUTION = ROUND_ROBIN, HEAP)
AS
SELECT
setting.[Company],
setting.[FileName],
setting.[Year],
setting.[Month],
setting.[Day],
setting.[Hour],
setting.[ExpectedNumber],
row_number() over (order by (select null)) RN
FROM config.settings s
CROSS APPLY OPENJSON(s.SettingValue)
WITH (
[Company] NVARCHAR(350),
[FileName] NVARCHAR(100),
[Year] NVARCHAR(100),
[Month] NVARCHAR(100),
[Day] NVARCHAR(100),
[Hour] NVARCHAR(100),
[ExpectedNumber] INT
) AS setting
WHERE s.SettingKey = 'quality\check\files';
虽然我显式创建了表,所以一切都是正确的。我的意思是该表已成功创建并填充。 你在这里
CREATE TABLE temp.test_table
(
[Company] NVARCHAR(150), -- Update the data type here
[FileName] NVARCHAR(100),
[Year] NVARCHAR(100),
[Month] NVARCHAR(100),
[Day] NVARCHAR(100),
[Hour] NVARCHAR(100),
[ExpectedNumber] INT,
RN INT
)
WITH (DISTRIBUTION = ROUND_ROBIN, HEAP);
INSERT INTO temp.test_table
SELECT
setting.[Company],
setting.[FileName],
setting.[Year],
setting.[Month],
setting.[Day],
setting.[Hour],
setting.[ExpectedNumber],
row_number() over (order by (select null)) RN
FROM config.settings s
CROSS APPLY OPENJSON(s.SettingValue)
WITH (
[Company] NVARCHAR(150), -- Update the data type here
[FileName] NVARCHAR(100),
[Year] NVARCHAR(100),
[Month] NVARCHAR(100),
[Day] NVARCHAR(100),
[Hour] NVARCHAR(100),
[ExpectedNumber] INT
) AS setting
WHERE s.SettingKey = 'quality\check\files';
如果有人可以向我解释为什么会发生这种情况。
在帖子下提出一系列问题后,我得出的结论是,该问题是在表创建过程中引发的一个错误,该错误是从类似 json 的字符串中提取数据(利用
CROSS APPLY OPENJSON(...)
表达式)。
顺便说一句,当我不使用上述表达式时,将创建一个没有任何错误的表。这是一个成功例子的演示
CREATE TABLE temp.test_table10 WITH (DISTRIBUTION = ROUND_ROBIN, HEAP)
AS SELECT
*,
row_number() over (order by (select null)) RN
FROM config.settings s
WHERE s.SettingKey = 'DQ\check\inboundFiles';