2016-04-29 4 views
1

У меня есть 2 таблицы ProductSize и Product.SQL Server: вставить идентификатор

Продукта стол:

ProductID ProductCode ProductSizeID 

Размер продукт стол:

ProductSizeID PackperCase ItemsperCase ItemSize 

У меня есть хранимая процедура, которая заполнит оба эти таблицы, однако я не могу заполнить Products таблицы без заполняя таблицу Product Size (так как мне нужен productsizeID).

Как я могу справиться с этим?

Мне нужно что-то, что показывает последний идентификатор, который я только что вставил в таблицу Productsize. Хранимая процедура вставляет 1 запись за раз, но я действительно не хочу использовать MAX(), чтобы получить идентификатор, потому что в базе данных могут происходить другие вещи.

+2

Если запись sproc inserts 1 записывается за раз, почему вы не можете использовать ['SCOPE_IDENTITY()'] (https://msdn.microsoft.com/en-GB/library/ms190315.aspx), чтобы получить значение, которое вы только что вставили? – Shaneis

+0

Спасибо, я использовал его SELECT ID2 = SCOPE_IDENTITY() Print ID2 – Abbaskhan

ответ

2

Вы должны сначала вставить строку в ProductSize и получить идентификатор обратно:

INSERT INTO dbo.ProductSize(PackPerCase, ItemsPerCase, ItemSize) 
VALUES(....., ....., .....); 

DECLARE @NewID INT = SCOPE_IDENTITY();  

, а затем использовать это в вашей второй вставки в Products таблице:

INSERT INTO dbo.Products(ProductCode, ProductSizeID) 
VALUES(....., @NewID); 

и вы сделанный!

Смежные вопросы