Скопировать идентификатор из таблицы в другую - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть процедура, которая устанавливает детали продукта, я ввожу детали в качестве параметров, как и сейчас, детали вводятся в две разные таблицы: таблицу "Продукты" и таблицу "Книга", я смог установить детали на месте , но я также хочу получить ProductID из таблицы Product в таблицу Book, где столбец также называется ProductId.

ALTER PROCEDURE [dbo].[ProductDetails] 

@Name nvarchar(50),
@Deascription nvarchar(255),
@Image image,
@Price nvarchar(50),
@Val1 nvarchar(50),
@Val2 nvarchar(50),
@Val3 nvarchar(50)

AS
     INSERT INTO Products
     VALUES (@Name,@Deascription,@Image,@Price);

     INSERT INTO Book(ISBN, Ammount, Auther)
     VALUES (@Val1,@Val2,@Val3);

     INSERT INTO Book(ProductID)  //F_K referencing Products.ProductID
     SELECT ProductID FROM Products
     WHERE Products.ProductName=@Name AND Products.Deascription=@Deascription;

Эта процедура выполняется следующим образом.

exec ProductDetails book23, 'id should be=23', NULL, 23, 233, 23, bookers;

Теперь проблема в том, что идентификатор сдвигается на 1 строку вниз, когда он вставляется во вторую таблицу, отметьте Рис.

Products Table

it shifts down in 2nd table!

1 Ответ

1 голос
/ 19 февраля 2020

Это не смещение. Вы делаете два INSERT оператора, а второй просто вставляете ProductID.

Если вы хотите вставить все в одну строку, сделайте что-то вроде:

INSERT INTO Book
(
    ISBN, 
    Amount, 
    Author,
    ProductID
)
SELECT
    @Val1,
    @Val2,
    @Val3,
    p.ProductID
FROM Products as p
 WHERE p.ProductName=@Name 
 AND p.Description=@Description;

ПРИМЕЧАНИЕ : Исправлены орфографические ошибки для описания, автора и суммы

...