Как использовать веб-API для выполнения SP, который будет либо получать данные, либо вставлять данные? - PullRequest
0 голосов
/ 18 февраля 2020

Моя конечная цель - написать приложение форм Xamarin для использования веб-API для получения и хранения данных в базе данных; и затем записать данные в PL C через OP C.

. Я могу записать данные в PL C без проблем; меня беспокоит то, что я еще не создал API; поскольку я не уверен, как это сделать go. Хранимая процедура всегда должна возвращать данные; но в вентиляторе нет данных, он должен вставить данные и вернуть то, что было введено. Можно ли все это сделать одним GET, POST или PATCH? Или мне нужно изменить свою хранимую процедуру и получить данные, а если данных не существует, выполнить публикацию, чтобы вставить данные, а затем вернуть их снова ??

Спасибо всем за помощь!

CREATE PROCEDURE [dbo].[ShrinkLotConfirmation3]

/* Values to be passed from machine */
    @plcid nvarchar(6) OUTPUT,
    @supplierlot nvarchar(25),
    @internallotnum nvarchar(25)OUTPUT,
    @plclotnum nvarchar(25) OUTPUT,
    @suppliercode nvarchar(1),
    @supplierpartnum nvarchar(25),
    @suppliermodel nvarchar(25),
    @palletqty int,
    @id int OUTPUT,

    @errormsg nvarchar(max) OUTPUT,
    @errornum int OUTPUT,
    @errorproc nvarchar(max) OUTPUT,
    @errorstate int OUTPUT,
    @errorline int OUTPUT


AS
    BEGIN
        BEGIN TRY
        /* Check if lot already exists */
        SELECT @internallotnum = InternalLotNum, @plcid = PLCID, @plclotnum = plclotnum, @id = id FROM dbo.ShrinkLotData WHERE SupplierMfgLot = @supplierlot
            IF @internallotnum IS NULL
                BEGIN
                    DECLARE @table table (plcid nvarchar(6), internallotnum nvarchar(25), plclotnum nvarchar(25), id int)

                    INSERT INTO dbo.ShrinkLotData(PLCID, SupplierMfgLot, InternalLotNum, PLCLotNum, SupplierCode, SupplierPartNum, SupplierModel, PalletQty, Month, Day, Year, TimeStamp)
                    OUTPUT inserted.plcid, inserted.InternalLotNum, inserted.PLCLotNum, inserted.ID
                    INTO @table (plcid, internallotnum, plclotnum, id)
                    VALUES(
                        @plcid,
                        @supplierlot,
                        (SELECT MAX(InternalLotNum) + 1 FROM dbo.ShrinkLotData),
                        (SELECT MAX(RIGHT(InternalLotNum, 2) + 1) FROM dbo.ShrinkLotData),
                        @suppliercode,
                        @supplierpartnum,
                        @suppliermodel,
                        @palletqty,
                        Month(GetDate()),
                        Day(Getdate()),
                        Year(GetDate()),
                        CURRENT_TIMESTAMP)  

                        SELECT @plcid = plcid, @internallotnum = internallotnum, @plclotnum = plclotnum, @id = id from @table

                END

        END TRY





        /*   E-mail if errors occurs   */
        BEGIN CATCH
        SET @errormsg = 'SP Failed with msg:' + ERROR_MESSAGE()
        SET @errornum = ERROR_NUMBER()
        SET @errorproc = ERROR_PROCEDURE()
        SET @errorstate = ERROR_STATE()
        SET @errorline = ERROR_LINE()
            /* Place holder to insert fail data into a table
            INSERT INTO KSError(datestamp, errormsg, errorproc, errorstate,errorline)
            VALUES (@datestamp, @errormsg, @errornum, @errorproc, @errorstate, @errorline)     

            */

        EXECUTE msdb.dbo.sp_send_dbmail
        @recipients = 'email@domain.com',
        @profile_name = 'Alerts',
        @subject = ' SP Error',
        @body = @errormsg

        END CATCH
    END
...