私はこの効果を得るために何かしたいと思っています。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を与えたいとします。
'Get_Next_PK 'は関数のようには見えません。これはストアドプロシージャです。実行する場合は、行ごとに 'cursor'または' whileループ 'が必要です。しかしその前に、あなたは 'Get_Next_PK'のコードを共有できますか?それを行う簡単な方法が必要です。 – AKS
"Level2 PKはユニークではありません" - PKがプライマリキーを表し、それが一意でない場合は、他の問題があります。 :) –
ストアドプロシージャではなく、関数ではなく、誤って入力していました。残念ながらコードを共有することはできません。そして、はい、私はPKがユニークでなければならないことを知っていますが、そうではありません。私はそれを回避する必要があります。 –