2016-03-28 14 views
0

私はこの効果を得るために何かしたいと思っています。SQL挿入ステートメントでの反復ストアドプロシージャ

レベル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_2を挿入します。 (その論理はwhere文の前にあります)

Get_Next_PKは、パラメータとして 'location_lvl2'テーブル名をとり、次のPKとして '13'を返します。

「main office」を持たないlvl_1のそれぞれを繰り返し、insertステートメント内でSPの出力変数(@foo)を使用してlvl_2を与えたいとします。

+1

'Get_Next_PK 'は関数のようには見えません。これはストアドプロシージャです。実行する場合は、行ごとに 'cursor'または' whileループ 'が必要です。しかしその前に、あなたは 'Get_Next_PK'のコードを共有できますか?それを行う簡単な方法が必要です。 – AKS

+1

"Level2 PKはユニークではありません" - PKがプライマリキーを表し、それが一意でない場合は、他の問題があります。 :) –

+0

ストアドプロシージャではなく、関数ではなく、誤って入力していました。残念ながらコードを共有することはできません。そして、はい、私はPKがユニークでなければならないことを知っていますが、そうではありません。私はそれを回避する必要があります。 –

答えて

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...) 
関連する問題