2012-10-12 20 views
12

mam tabelę z pojedynczej kolumny, która jest tożsamość generowanych automatyczniewstawić wiele rzędów wartości domyślnych do tabeli

create table SingleIdTable (
    id int identity(1,1) not null 
) 

można wstawić jeden rząd z automatycznym generowane z identyfikatorem:

insert into SingleIdTable default values 

chcę wstawić wiele wierszy i użyć składni wyjścia, aby uzyskać ich identyfikatory, coś jak:

insert into SingleIdTable 
output inserted.Id into @TableOfIds 
    select (default values) from SomeOtherTable where Attribute is null 

gdzi Zamierzeniem jest wstawienie wiersza do SingleIdTable dla każdego wiersza w SomeOtherTable, gdzie Attribute ma wartość null przy użyciu automatycznie generowanego identyfikatora. Powyższe nie działa, ale jak mogłem to zrobić. Zauważam, że gdyby mój stół miał więcej niż jedną kolumnę, mógłbym to zrobić, ale nie mogę wybrać pustych wierszy, co naprawdę chcę zrobić.

Nie mogę zmienić definicji SomeOtherTable.

Odpowiedz

21

Jeśli SQL Server 2008+ można użyć do tego MERGE. Przykładowa składnia poniżej.

MERGE INTO SingleIdTable 
USING (SELECT * 
     FROM SomeOtherTable 
     WHERE Attribute IS NULL) T 
ON 1 = 0 
WHEN NOT MATCHED THEN 
    INSERT 
    DEFAULT VALUES 
OUTPUT INSERTED.id; 

Nie jestem pewien, jakie praktyczne zastosowanie ma ta jedna kolumna tabeli?

+1

+1 Nigdy nie myślałem o MERGE – RichardTheKiwi

+0

Przebieganie ... Stół jest artefaktem osoby niewłaściwie stosującej NHibernate podczas mapowania grupy. Zgodzę się z tym, ale teraz zdaję sobie sprawę, że mogę zrobić z korelacją wewnętrznej kwerendy z insertem, tak żebym mógł 'wyprowadzić inser.id, SomeOtherTable.id)'. czy to możliwe? Naprawdę po prostu muszę dopasować moją torbę generowanych identyfikatorów, każdy z elementem 'SomeOtherTable', gdzie' Attribute' ma wartość null. jakieś pomysły? – silasdavis

+0

@silasdavis - Tak po prostu użyj 'OUTPUT INSERTED.id, T.id' –

-1

Nie można użyć numeru SCOPE_IDENTITY(), aby uzyskać identyfikator wstawionego wiersza? Twoje pytanie jest trochę niejasne, czy możesz wyjaśnić?

Powiązane problemy