2016-03-28 22 views
0

Bu etkiyle ilgili bir şeyler yapmak istiyorum.Bir SQL Eklenti Statüsü'nde Iterative Stored Prosedürü

1. düzey konumların bir listesini aldığımda, her biri için bir 'Ana Ofis' düzey 2 konumu ekleyin ve ekleme ifadesinde yinelemeli olarak Get_Next_PK saklı yordamımı kullanın.

Bunu farklı şekilde yapmak için göze çarpan bir şekilde açık bir şekilde eksik olduğumu hissediyorum.

Düzey2 PK benzersiz değildir ve bu nedenle de bir autoincrement/kimlik

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...) 

değil ben alıyorum sonuç: benim işlevi doğru sonraki PK çeker, fakat sadece bir kez, bu nedenle tüm satırların aynı PK. Bunun üzerine, sonuçları penceremde görüntülenmesini istediğim verileri görüyorum, ancak verilerden hiçbiri gerçekte tabloya eklenmiyor

Örnek Bilgiler: 5 Lvl_1 konumu ve 12 Lvl_2 var konumları (PK 1-12). 5 lvl_1’in tamamı 'ana giriş' ve 'kafeterya' lvl_2 yerlerine sahiptir. Bunlardan 2'sinde 'ana ofis' var lvl_2.

Her bir lvl_1 için bir tane olmayan bir 'ana ofis' lvl_2 eklemek istiyorum. (Bu mantık, burada nereye koyduğum yerden başlar.)

Get_Next_PK 'location_lvl2' tablo adını parametre olarak alır ve '13' sonraki PK olarak döndürür.

lvl_1'in 'ana ofisi' olmayan her birini yinelemeyi ve ekleme deyiminde SP'nin çıktı değişkenini (@foo) kullanarak bir lvl_2 vermeyi istiyorum.

+1

'Get_Next_PK' işleviniz bir işlev gibi görünmüyor, saklı yordamdır. Eğer yürütmek istediğiniz her satır için ise, bir 'imleç' ya da 'while 'döngüsüne ihtiyacınız olacaktır. Ama bundan önce, Get_Next_PK'nin kodunu paylaşabilir misiniz? Bunu yapmanın daha basit bir yolu olmalı. – AKS

+1

"Level2 PK benzersiz değil" - Eğer PK Birincil Anahtar anlamına gelirse ve bu benzersiz değildir, başka sorunlarınız var demektir. :) –

+0

Saklı yordam hakkında doğru, bir işlev değil, yanlış yazım oldu. Maalesef kodu gerçekten paylaşamam. Ve evet biliyorum ki PK'nin eşsiz olması gerekiyor, ama değil, bunun etrafında çalışmak zorundayım. –

cevap

0

Biraz daha googling ve @HLGEM'den doğru yönde bir dürtmeden sonra bu işi yapabildim. İdeal değil, biliyorum ama sorunumu çözdü.

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...)