Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在迭代要插入的值。。。还是另一种方式?SQL Server_Sql_Sql Server_Tsql_Sql Insert - Fatal编程技术网

正在迭代要插入的值。。。还是另一种方式?SQL Server

正在迭代要插入的值。。。还是另一种方式?SQL Server,sql,sql-server,tsql,sql-insert,Sql,Sql Server,Tsql,Sql Insert,附加问题: 我无法在INSERT语句中别名ETL.Dim_状态。。。这让我相信insert-in和select/from/leftjoin/where是两个独立的语句。。。那么为什么我不能在所有东西下面插入呢 它们是两个独立的陈述还是一个?如果它们是一个,那么为什么我不能在插入到部分中使用别名 我选择了一个子查询?。。。那为什么不在括号里呢 因此,如果我尝试运行这个,那么我会得到一个错误,告诉我子查询返回了多个值。我知道这一点,我需要插入所有这些值 INSERT INTO ETL.Dim_St

附加问题: 我无法在INSERT语句中别名ETL.Dim_状态。。。这让我相信insert-in和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

   );
更新-如果您试图添加来自被邀请者的状态,但该状态尚未处于ETL.Dim_状态

   INSERT INTO ETL.Dim_Status ([Status])    
   SELECT DISTINCT [Status] 
   FROM dbo.Invitee 
   WHERE [Status] NOT IN ( SELECT DISTINCT [Status] FROM ETL.Dim_Status)
了解更多关于

更新-如果您试图添加来自被邀请者的状态,但该状态尚未处于ETL.Dim_状态

   INSERT INTO ETL.Dim_Status ([Status])    
   SELECT DISTINCT [Status] 
   FROM dbo.Invitee 
   WHERE [Status] NOT IN ( SELECT DISTINCT [Status] FROM ETL.Dim_Status)

查看更多关于

只需删除
关键字,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

只需删除
关键字,sql操作就是set操作。 这是一种标准的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

在重复你想要达到的目标之后?您的输入是什么?使用insert存储的预期输出是什么?大多数场景不需要迭代第一个是“基于集合的操作”,它将插入SELECT语句返回的所有值。你只是有点混淆了你真正想要达到的目标。但是在重复了你想要达到的目标之后,更新了我的回答?您的输入是什么?使用insert存储的预期输出是什么?大多数场景不需要迭代第一个是“基于集合的操作”,它将插入SELECT语句返回的所有值。你只是有点混淆了你真正想要达到的目标。但是更新了我的答案