SQL插入状态器

时间:2016-03-28 22:56:11

标签: sql sql-server tsql stored-procedures sql-insert

我正在寻求做这件事。

在我获得1级位置列表的情况下,为每个位置插入“主办公室”2级位置,并在插入语句中迭代使用我的Get_Next_PK存储过程。

我觉得我可能错过了以不同方式做到这一点的明显方式。

Level2 PK不是唯一的,因此也不是自动增量/身份

DECLARE @foo INT

INSERT INTO LocationLvl2_Table
    EXEC Get_Next_PK 'LocationLvl2_Table', @foo OUTPUT

SELECT 
    @foo, LocationLvl1_Code, 'Main Office', 1
FROM 
   (SELECT DISTINCT 
        LocationLvl1_Code
    FROM 
        LocationLvl1_Table
    WHERE...)

我得到的结果:我的函数拉出正确的下一个PK,但只有一次,所以所有行都有相同的PK。最重要的是,我看到我想要插入的数据显示在我的结果窗口中,但实际上没有任何数据插入到表中

示例信息: 我有5个Lvl_1位置和12个Lvl_2位置(PK 1-12)。所有5个lvl_1都有'主入口'和'自助餐厅'lvl_2位置。其中2人有一个'主办公室'lvl_2。

我想为每个没有lvl_1的lvl_1插入一个'主办公室'lvl_2。 (那个逻辑从我在where语句中落后的地方开始。)

Get_Next_PK将'location_lvl2'表名作为参数,并返回'13'作为下一个PK。

我想遍历每个没有'main office'的lvl_1,并在insert语句中使用SP的输出变量(@foo)给它们一个lvl_2。

1 个答案:

答案 0 :(得分:0)

经过一些谷歌搜索,并从@HLGEM向正确的方向推动我能够做到这一点。我知道,这并不理想,但它解决了我的问题。

DECLARE @foo INT
EXEC Get_Next_PK 'LocationLvl2_Table', @foo OUTPUT
INSERT INTO LocationLvl2_Table
SELECT @foo + ROW_NUMBER() over(order by LocationLvl1_Code), LocationLvl1_Code, 'Main Office', 1
FROM 
(SELECT DISTINCT 
    LocationLvl1_Code
FROM 
    LocationLvl1_Table
WHERE...)