如何在SQL Server中循环语句

时间:2018-12-14 05:04:47

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

我是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中是否可以,如果可以,请帮助我做到这一点

2 个答案:

答案 0 :(得分: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'               

答案 1 :(得分:0)

根据您的问题,我创建了示例代码,如果要在表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'