【问题标题】:How to loop statements in SQL Server如何在 SQL Server 中循环语句
【发布时间】:2019-05-15 08:57:35
【问题描述】:

我是 SQL Server 的新手,我正在尝试执行以下操作。

示例代码:

SELECT ITEM_ID
FROM 'TABLE_NAME_1'
WHERE ITEM_STATUS = 'ACTIVE'

SET @ITEM_PRICE = (SELECT PRICE
                   FROM 'TABLE_NAME_2'
                   WHERE 'PRODUCT_ID' = 'ITEM_ID')

INSERT INTO 'TABLE_NAME_3' (ITEM_ID, PRICE)
VALUES (@ITEM_ID, @ITEM_PRICE)
  1. 第一条语句会返回多行ITEM_ID
  2. 通过使用ITEM_ID,我需要使用第二条语句从另一个表中选择ITEM_PRICE
  3. 通过使用第三条语句,我需要将数据插入到第三张表中

这里第一条语句只返回了一个ITEM_ID,那么一切都好办了。如果它返回多行,我该如何为第一条语句返回的所有ITEM_ID 执行所有这些过程?

实际上,如果第一条语句返回 5 行,我需要循环 5 次。

在 SQL Server 中是否可以,如果可以,请帮我这样做

【问题讨论】:

    标签: sql sql-server tsql sql-server-2014


    【解决方案1】:

    问题是为什么不使用直接 SQL

    INSERT 
      INTO 'TABLE_NAME_3' 
           (ITEM_ID
            ,PRICE
           )
     SELECT ITEM_ID,ITEM_PRICE
       FROM 'TABLE_NAME_1' A
       JOIN 'TABLE_NAME_2' B
         ON A.ITEM_ID=B.PRODUCT_ID
      WHERE A.ITEM_STATUS = 'ACTIVE'               
    

    【讨论】:

    • 作为第一个选项,我会考虑直接使用 sql 而不是循环逻辑。直接 SQL 让查询更高效
    • 如果多个项目的状态为“活动”,它会插入所有这些项目的数据吗?
    【解决方案2】:

    根据您的问题,我创建了示例代码,如果您想在表 1 和表 2 之间插入公共数据,则只能使用一个查询来插入多个数据,然后使用内连接或左连接就可以了。

    代码

    INSERT INTO 'TABLE_NAME_3' (ITEM_ID,PRICE)
    SELECT T1.ITEM_ID , T2.PRICE
    FROM 'TABLE_NAME_1' AS T1
    INNER JOIN 'TABLE_NAME_2' AS T2 ON T2.PRODUCT_ID = T1.ITEM_ID
    WHERE T1.ITEM_STATUS = 'ACTIVE' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2013-04-19
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      相关资源
      最近更新 更多