Купите товар вместе с сохранением имени поставщика в SQL Server
Я использую SQL Server 2014, в котором я разработал базу данных для работы с общим магазином управления.
Я должен ввести товар вместе с именем поставщика, его запасом и наименованием товара. Для этого мне нужно выполнить три оператора, поэтому я использую опцию транзакции, так как мне нужно откатиться снова, если во время реализации возникнут какие-либо проблемы. Вот SQL, с которым я столкнулся со многими проблемами.
Вот код SQL, который я пытаюсь запустить:
BEGIN TRANSACTION AddItem
INSERT INTO Product(Name, Stock, Type_Id, Pur_Price, Sale_Price)
VALUES ('Lemon', 20, 2, 129, 325);
INSERT INTO Supplier(Name, Contact_No)
VALUES ('Kamran', '034637827');
INSERT INTO Purchase(Product_id, Supplier_Id, Quantity)
VALUES(EXEC spGetProductId @Name= 'Lemon', EXEC spGetSupplierId @Name='Kamran', 20);
COMMIT AddItem
ROLLBACK
1 ответ
Пара вопросов:
- Невозможно использовать вывод хранимой процедуры в предложении значений.
- Почему вы делаете коммит и откат
- Вы выполняете это из SSMS, приложения C# и т. Д.?
- Что sp_getproductid возвращает набор результатов или возвращаемое значение?
Может быть, что-то подобное будет работать для SSMS или если вы планируете сделать из него хранимую процедуру
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO Product(Name, Stock, Type_Id, Pur_Price, Sale_Price)
VALUES ('Lemon', 20, 2, 129, 325);
INSERT INTO Supplier(Name, Contact_No)
VALUES ('Kamran', '034637827');
DECLARE @prodid int
EXEC @prodid = spGetProductId @Name= 'Lemon'
DECLARE @SupplierID int
EXEC @SupplierID = spGetSupplierId @Name='Kamran'
INSERT INTO Purchase(Product_id, Supplier_Id, Quantity)
VALUES(@prodid , @SupplierID, 20);
COMMIT
END TRY
BEGIN CATCH
DECLARE @ErrCode INT = 0,
@ErrMsg VARCHAR(4000) = '',
@CRLF CHAR(2) = CHAR(13) + CHAR(10)
SET @ErrCode = @@ERROR;
SET @ErrMsg = ERROR_MESSAGE();
IF XACT_STATE() = -1
ROLLBACK TRANSACTION;
ELSE IF @@TRANCOUNT = 1
ROLLBACK TRANSACTION;
ELSE IF @@TRANCOUNT > 1 AND XACT_STATE() = 1
COMMIT;
RAISERROR(@ErrMsg, 16, 1);
END CATCH