Addtional Question: 我不能在INSERT语句中对ETL.Dim_Status进行别名...所以这让我相信插入和select / from / leftjoin / where是两个独立的语句......所以为什么我不能把插入放在所有的东西下面??
它们是两个单独的陈述还是一个?如果它们是一个,那么为什么我不能在插入部分中使用别名?
我选择一个子查询?...那么为什么它不在括号中?
因此,如果我尝试运行它,那么我会收到一个错误,告诉我Sub-Query返回了多个值。我知道这一点,我需要插入所有这些值。
INSERT INTO ETL.Dim_Status ([Status])
VALUES(
--- I need to iterate through each of the new distinct values
(
SELECT DISTINCT
I.[Status]
FROM
dbo.Invitee I
LEFT JOIN
ETL.Dim_Status S
ON I.[Status] = S.[Status]
WHERE
S.[Status] IS NULL
)
);
我可以将它设置为基于集合的操作,而不是逐行插入值吗?
我尝试过光标,但我甚至不知道是否把所有东西都放在了正确的位置:
DECLARE insertNewStatus CURSOR
INSERT INTO ETL.Dim_Status ([Status])
VALUES(
--- I need to iterate through each of the distinct values
FOR
(
SELECT DISTINCT
I.[Status]
FROM
dbo.Invitee I
LEFT JOIN
ETL.Dim_Status S
ON I.[Status] = S.[Status]
WHERE
S.[Status] IS NULL
)
OPEN insertNewStatus
FETCH NEXT FROM insertNewStatus
);
答案 0 :(得分:3)
INSERT INTO ETL.Dim_Status ([Status])
SELECT DISTINCT I.[Status]
FROM dbo.Invitee I
LEFT JOIN ETL.Dim_Status S ON I.[Status] = S.[Status]
WHERE S.[Status] IS NULL
更新 - 如果您尝试添加来自Invitee的状态,这些状态尚未包含在ETL.Dim_Status中
INSERT INTO ETL.Dim_Status ([Status])
SELECT DISTINCT [Status]
FROM dbo.Invitee
WHERE [Status] NOT IN ( SELECT DISTINCT [Status] FROM ETL.Dim_Status)
答案 1 :(得分:2)
只需删除values
关键字,sql操作就是设置操作。
它是标准的SQL语法。
INSERT INTO ETL.Dim_Status ([Status])
SELECT DISTINCT
I.[Status]
FROM
dbo.Invitee I
LEFT JOIN
ETL.Dim_Status S
ON I.[Status] = S.[Status]
WHERE
S.[Status] IS NULL