Выполнить хранимую процедуру, если еще условия - PullRequest
0 голосов
/ 20 июня 2019

Я хотел бы знать, как выполнить хранимую процедуру на основе того, существует ли идентификатор клиента, создать заказ клиента для указанного клиента.Иначе, создайте нового клиента с указанным идентификатором.

У меня есть несколько кодов здесь, но я получаю сообщение об ошибке: «Процедура или функция« CustOrder1 »ожидает параметр« @ custid1 », который не был предоставлен».Любая помощь будет хорошо, заранее спасибо.

declare @custid1 char (6), @CustName1 nvarchar(255)
set @custid1 = 001
set @custName1 = 'Pete'
select @custid1 = 'c102', @custName1 = 'Pete'

update CustomerRecord
    set CustomerID = @custid1
where CustName = @CustName1

select * from CustomerRecord where CustomerID = @custid1
if @@ROWCOUNT = 0
    print 'The id ' + cast(@custid1 as  varchar(5)) + ' does not exists'
else
    print 'Update successsful'
go

alter procedure CustOrder1
  @custid1 CHAR (6), @custName1 VARCHAR (40), @SalesOrderID CHAR (10)
as
begin
  if not exists (select * from CustomerRecord
    where CustName = @CustName1)
  begin
    insert into CustomerRecord (CustomerID)
      values (@custid1)
  end
end
go

exec CustOrder1

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы определили процедуру CustOrder1 с 3 параметрами.

  • @ custid1
  • @ custName1
  • @ SalesOrderID

Когда вы попытаетесь выполнить эту процедуру без передачи каких-либо параметров, вы получите ошибку.

Кроме того, параметр @SalesOrderID не используется в этой процедуре, поэтому его можно удалить (если только вы не опубликовали его часть).

Он также не вставляет @ custName1 в таблицу CustomerRecord, поэтому при каждом запуске этой процедуры он будет пытаться создать новую запись для этого @ custid1.

Чтобы дать общий ответ на ваш вопрос, вы идете по правильному пути. Вам понадобится что-то вроде (псевдокод для иллюстрации структуры):

CREATE PROCEDURE CustOrder
    -- Parameters
AS

BEGIN

    IF NOT EXISTS (SELECT * FROM CustomerRecord WHERE CustName = @custName1)
    BEGIN

        -- Create the customer record.

    END

    -- Create the order.

END
0 голосов
/ 20 июня 2019

Вы должны попробовать этот способ ... для получения дополнительной информации, вы можете посетить эту ссылку

CREATE PROCEDURE CustOrder
@custName1 VARCHAR(50) = '',
@ReturnValue VARCHAR(100) OUT 
AS

BEGIN

    IF EXISTS (SELECT 1 FROM CustomerRecord WITH (NOLOCK) WHERE CustName = @custName1)
        BEGIN


          SET @ReturnValue =  -1 -- for customer already exists

        END
   ELSE
        BEGIN

     -- write your insert statement

          SET @ReturnValue =  @@IDENTITY -- for return inserted customer identity column from CustomerRecord 

        END

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...