Купите товар вместе с сохранением имени поставщика в SQL Server - PullRequest
0 голосов
/ 04 декабря 2018

Я использую 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 Ответ

0 голосов
/ 04 декабря 2018

Пара проблем:

  1. Невозможно использовать вывод хранимой процедуры в предложении значений.
  2. Почему у вас есть фиксация и откат
  3. Выполняете ли вы это изSSMS, некоторые приложения на C # и т. Д.
  4. что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...