【发布时间】:2017-07-21 09:10:18
【问题描述】:
其他问题: 我不能在 INSERT 语句中为 ETL.Dim_Status 加上别名……所以这让我相信插入和 select/from/leftjoin/where 是两个独立的语句……那么为什么我不能将插入插入到所有内容的下方??
它们是两个独立的语句还是一个?如果它们是一个,那为什么我不能在插入部分中使用别名?
我选择了一个子查询?...那为什么不在括号里呢?
因此,如果我尝试运行此程序,则会收到一条错误消息,告诉我子查询返回了多个值。我知道这一点,我需要插入所有这些值。
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
);
【问题讨论】:
-
在迭代你想要实现的目标之后?您的输入是什么,您使用插入存储的预期输出是什么?大部分场景不需要迭代
-
第一个是“基于集合的操作”,它将插入 SELECT 语句返回的所有值。你只是语法不正确
-
我对你实际想要达到的目标有点困惑。但更新了我的答案
标签: sql sql-server tsql sql-insert