2012-10-12 27 views
12

Tôi có một bảng với một cột duy nhất, đó là một bản sắc tự động tạo raChèn nhiều hàng các giá trị mặc định vào một bảng

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

tôi có thể chèn một hàng duy nhất với một id tự động được tạo ra với:

insert into SingleIdTable default values 

tôi muốn chèn nhiều hàng và sử dụng cú pháp đầu ra để có được id của họ, một cái gì đó như:

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

wher e ý định là chèn một hàng vào SingleIdTable cho mỗi hàng trong SomeOtherTable trong đó Attribute là null bằng cách sử dụng id được tạo tự động. Ở trên không hoạt động, nhưng làm thế nào tôi có thể làm điều đó. Tôi lưu ý rằng nếu bảng của tôi có nhiều hơn chỉ là một cột duy nhất tôi có thể làm điều đó, nhưng tôi không thể chọn hàng trống mà là những gì tôi thực sự muốn làm.

Tôi không thể thay đổi định nghĩa của SomeOtherTable.

Trả lời

21

Nếu SQL Server 2008+ bạn có thể sử dụng MERGE cho việc này. Cú pháp ví dụ dưới đây.

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; 

Tôi không chắc chắn về cách sử dụng thực tế của bảng cột đơn này?

+1

+1 Không bao giờ nghĩ về MERGE – RichardTheKiwi

+0

Xảo quyệt ... Bảng một tác phẩm của một ai đó không thích hợp NHibernate khi ánh xạ một nhóm. Tôi sẽ chấp nhận điều này, nhưng bây giờ tôi nhận ra rằng tôi có thể làm tương quan với truy vấn bên trong với chèn để tôi có thể 'output inserted.id, SomeOtherTable.id)'. Điều này có thể không? Thực sự tôi chỉ cần kết hợp các túi của các id được sinh ra với một phần tử 'SomeOtherTable' trong đó' thuộc tính' là null. Có suy nghĩ gì không? – silasdavis

+0

@silasdavis - Chỉ cần sử dụng 'OUTPUT INSERTED.id, T.id' –

-1

Bạn không thể sử dụng SCOPE_IDENTITY() để nhận ID của hàng được chèn? Bạn thắc mắc là một chút mơ hồ, bạn có thể làm rõ được không?

Các vấn đề liên quan