我有一个任务,可以将所有表有条件地插入到下一个信息中。我需要合并相同的值,例如Abonentas
表主键(AbonentoID)
,其中miestoID
是1。我尝试了函数合并,但是在{{1之后}}。我已经搜索了很多有关它的信息,但找不到解决方案。
关键字“ WHEN”附近的语法不正确
Inner Join
答案 0 :(得分:2)
需要在VipAbonentai_source
中返回以下列。我不确定它们来自哪个表。我已将声明写为common table expression (CTE)。
ab.[abonentoID]
, [asmensID]
, [planoID]
, [numeris]
, [sutartiesPradzia]
, [sutartiesPabaiga]
如果将其包装在transaction中,则可以在rollback上运行它而不会影响任何记录。另外,我输出记录以查看会发生什么变化。如果桌上有触发器,则必须注释掉OUTPUT
行。
SET XACT_ABORT ON;
BEGIN TRANSACTION;
WITH
VipAbonentai_source
AS
(
SELECT
ab.[abonentoID]
, [asmensID]
, [planoID]
, [numeris]
, [sutartiesPradzia]
, [sutartiesPabaiga]
FROM
Abonentas AS ab
INNER JOIN Asmuo AS A ON ab.[asmensID] = A.[asmensID]
INNER JOIN Miestas AS M ON M.[miestoID] = M.[miestoID]
WHERE
M.[miestoID] = 1
)
MERGE dbo.VipAbonentai AS T
USING VipAbonentai_source AS S
ON T.[abonentoID] = S.[abonentoID]
WHEN NOT MATCHED BY TARGET
THEN INSERT
(
[abonentoID], [asmensID], [planoID], [numeris], [sutartiesPradzia], [sutartiesPabaiga]
)
VALUES
(
S.[abonentoID], S.[asmensID], S.[planoID], S.[numeris], S.[sutartiesPradzia], S.[sutartiesPabaiga]
)
WHEN MATCHED
THEN UPDATE SET
T.[asmensID] = S.[asmensID]
, T.[planoID] = S.[planoID]
, T.[numeris] = S.[numeris]
, T.[sutartiesPradzia] = S.[sutartiesPradzia]
, T.[sutartiesPabaiga] = S.[sutartiesPabaiga]
--WHEN NOT MATCHED BY SOURCE --< You may want to add a WHERE clause here
--THEN DELETE
OUTPUT @@SERVERNAME AS [Server Name], DB_NAME() AS [Database Name], $action, inserted.*, deleted.*;
ROLLBACK TRANSACTION;
--COMMIT TRANSACTION;
GO