我試圖從臨時表(源)導入到SQL Server中的目標表(dest)。某些目標表值是根據條件語句從源表值中派生的。其中的邏輯是有點像這個使用IF ELSE語句從源表值中插入值到目標表dervived列
IF source.col1=0
BEGIN
IF source.col2=0
BEGIN
dest.colA = 1
dest.colB = source.col3
END
ELSE
BEGIN
dest.colC= 1
dest.colD= source.col3
END
ELSE IF source.col4>0
BEGIN
dest.colD=1
dest.colE=source.col3
END
ELSE
BEGIN
dest.colF=1
dest.colG=source.col1
END
END
我目前做的從源表到目標表中的合併在存儲過程中,並有其他列除此之外地圖完美以上。我如何編寫這個邏輯,以便根據上面的邏輯從源表列中設置目標表派生列?到目前爲止,我所嘗試過的所有東西都不適合我。預先感謝您的幫助
謝謝M. Ali先生和phiosophicles。我在合併聲明中使用這個,但現在我得到錯誤無效的對象名稱'來源'。
我沒有收到我的任何其他合併報表上的這個錯誤。來源如下。我曾經匿名在一定程度上所以請讓我知道,如果它是不明確
MERGE dbo.Destination WITH (HOLDLOCK) AS Target
USING
(
SELECT DISTINCT id, col3,
CAST(LEFT(DATEADD(m,months,CONVERT(date,CONCAT(origination,'/01'))),7) as varchar(20)) as CalendarMonth,
col1, col2,col4 FROM dbo.Staging
) AS Source
ON (Target.ID=Source.id
AND Target.Month=Source.col3)
WHEN MATCHED THEN
UPDATE SET
Target.CalendarMonth=Source.CalendarMonth,
Target.colF= (SELECT CASE WHEN col1>0 THEN 1 END AS colF FROM Source),
Target.colD=(SELECT CASE WHEN col4>0 THEN 1 END AS colD
FROM Source),
Target.colC=(SELECT CASE WHEN col1=0 AND col2=0
THEN 1 END AS colC FROM Source),
Target.colB(SELECT CASE WHEN col1>0 AND col2
THEN 1 END AS colB FROM Source),
Target.colG=(SELECT CASE WHEN col1>0 THEN col1 END AS colG FROM Source),
Target.colE=(SELECT CASE WHEN col4>0 THEN col3 END
AS colE FROM Source),
Target.PaidMonth=(SELECT CASE WHEN col1=0 AND col2=0
THEN col3 END AS PaidMonth
FROM Source),
WHEN NOT MATCHED BY TARGET THEN
INSERT
(Destination Table columns
)
VALUES
( Source values including derived values from above);
END
GO
UPDATE:
我代替select語句中派生列有CASE WHEN col4> 0 THEN col3 END等等,這樣擺脫了錯誤。謝謝大家的幫助!
謝謝@ M.Ali。我將這添加到了我的合併中,但是我現在在源Alias上收到了無效的對象錯誤。我不會在我用來填充其他表的其他合併語句中出現此錯誤。我在原始帖子中添加了詳細信息。 –