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,

我有以下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, 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'”