Sql 在插入/值/输出块中包含大小写
我有以下T-SQL:Sql 在插入/值/输出块中包含大小写,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下T-SQL: DECLARE @INSERTED_BOOKS table ( BookId int, Image varbinary(max), Preview varbinary(max) ) MERGE Books_Destination AS d USING Books_Source AS s ON 0 = 1 WHEN NOT MATCHED THEN INSERT (Author, BookCategoryId, Title) VALUES (s.Author,
DECLARE @INSERTED_BOOKS table (
BookId int,
Image varbinary(max),
Preview varbinary(max)
)
MERGE Books_Destination AS d
USING Books_Source AS s
ON 0 = 1
WHEN NOT MATCHED
THEN INSERT (Author, BookCategoryId, Title)
VALUES (s.Author, s.CategoryId, s.Title)
OUTPUT INSERTED.Id, s.Image, s.Preview
INTO @INSERTED_BOOKS;
我需要整合s.CategoryId到d.BookCategoryId的对话:
case
when CategoryId = 1 then 2
when CategoryId = 5 then 8
when CategoryId = 14 then 6
when CategoryId = 22 then 9
我的问题是如何将此案例集成到插入代码中。请尝试以下查询:
MERGE Books_Destination AS d
USING Books_Source AS s
ON 0 = 1
WHEN NOT MATCHED
THEN INSERT (Author, BookCategoryId, Title)
VALUES (s.Author,
(Case s.CategoryId When 1 Then 2
when 5 then 8
when 14 then 6
when 22 then 9
else NULL
End)
, s.Title)
OUTPUT INSERTED.Id, s.Image, s.Preview
INTO @INSERTED_BOOKS;
请尝试以下查询:
MERGE Books_Destination AS d
USING Books_Source AS s
ON 0 = 1
WHEN NOT MATCHED
THEN INSERT (Author, BookCategoryId, Title)
VALUES (s.Author,
(Case s.CategoryId When 1 Then 2
when 5 then 8
when 14 then 6
when 22 then 9
else NULL
End)
, s.Title)
OUTPUT INSERTED.Id, s.Image, s.Preview
INTO @INSERTED_BOOKS;
如果条件是
ON 0=1
,则强制执行“始终插入”,那么为什么不直接插入
INSERT Books_Destination (Author, BookCategoryId, Title)
OUTPUT INSERTED.Id, INSERTED.Image, INSERTED.Preview INTO @INSERTED_BOOKS
SELECT Author,
case
when CategoryId = 1 then 2
when CategoryId = 5 then 8
when CategoryId = 14 then 6
when CategoryId = 22 then 9
END, Title
FROM Books_Source;
但不管怎样合并。。将案例放入源定义中,这样,如果您想稍后更新并且只使用一个案例,就可以使用它
MERGE Books_Destination AS d
USING (
SELECT Author,
case
when CategoryId = 1 then 2
when CategoryId = 5 then 8
when CategoryId = 14 then 6
when CategoryId = 22 then 9
END AS BookCategoryId, Title, Image, Preview
FROM Books_Source
) AS s ON 0 = 1
WHEN NOT MATCHED
THEN
INSERT (Author, BookCategoryId, Title)
VALUES (s.Author, s.BookCategoryId, s.Title)
OUTPUT INSERTED.Id, s.Image, s.Preview INTO @INSERTED_BOOKS;
如果条件是
ON 0=1
,则强制执行“始终插入”,那么为什么不直接插入
INSERT Books_Destination (Author, BookCategoryId, Title)
OUTPUT INSERTED.Id, INSERTED.Image, INSERTED.Preview INTO @INSERTED_BOOKS
SELECT Author,
case
when CategoryId = 1 then 2
when CategoryId = 5 then 8
when CategoryId = 14 then 6
when CategoryId = 22 then 9
END, Title
FROM Books_Source;
但不管怎样合并。。将案例放入源定义中,这样,如果您想稍后更新并且只使用一个案例,就可以使用它
MERGE Books_Destination AS d
USING (
SELECT Author,
case
when CategoryId = 1 then 2
when CategoryId = 5 then 8
when CategoryId = 14 then 6
when CategoryId = 22 then 9
END AS BookCategoryId, Title, Image, Preview
FROM Books_Source
) AS s ON 0 = 1
WHEN NOT MATCHED
THEN
INSERT (Author, BookCategoryId, Title)
VALUES (s.Author, s.BookCategoryId, s.Title)
OUTPUT INSERTED.Id, s.Image, s.Preview INTO @INSERTED_BOOKS;
我认为你的代码有问题。未插入图像和预览,因此我收到inserted.Image、inserted.Preview的错误“无法绑定多部分标识符”。s、 图像和s.Preview也不起作用。第二个版本带有Merge,也有sintax错误。事实上,正如你所说,我不需要合并。这只是我试图让它工作。请先在没有输出子句的情况下尝试。这是用于合并还是插入?另外,它们从何而来,因为Books\u Source没有这些列,所以我假设它们必须来自Books\u DestinationI,我需要输出,因为我将使用这些列值对其他表执行其他操作。只需先在没有输出的情况下进行测试。我还修复了语法(一个额外的
)
)我认为你的代码有问题。未插入图像和预览,因此我收到inserted.Image、inserted.Preview的错误“无法绑定多部分标识符”。s、 图像和s.Preview也不起作用。第二个版本带有Merge,也有sintax错误。事实上,正如你所说,我不需要合并。这只是我试图让它工作。请先在没有输出子句的情况下尝试。这是用于合并还是插入?另外,它们从何而来,因为Books\u Source没有这些列,所以我假设它们必须来自Books\u DestinationI,我需要输出,因为我将使用这些列值对其他表执行其他操作。只需先在没有输出的情况下进行测试。我还修复了语法(一个额外的)
)是否在之后有额外的逗号作为类别id
,我没有使用两个逗号。即使只有一个逗号,也会出现错误“不正确的sintax靠近'as'”。as category id后有多余的逗号。
I没有使用两个逗号。即使只有一个逗号,也会出现错误“不正确的sintax靠近'as'”