Моя конечная цель - написать приложение форм 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