Member 13153537 Ответов: 1

При создании хранимой процедуры в SQL server появляется неправильный синтаксис рядом с ошибкой '='


У меня есть таблицы bankcheques, cheques и chequedetails теперь я создаю процедуру для
если bank_id, bankchequeno не существует в таблице bankcheques вставить запись. при обновлении записи я проверяю два условия, если chequeno не существует в таблице chequedetails обновить каждое поле из таблицы bankcheques.
и если chequeno существует в таблице chequedetails, обновите только поле status в таблице bankcheques. здесь я проверяю другое условие.
я беру maxcheueno из таблицы чеков на основе bankid и chequeend из таблицы bankcheques и сравниваю оба значения, а затем обновляю статус таблицы bankcheque.Я получаю неправильный синтаксис рядом с ошибкой"=", пожалуйста, помогите мне в этом.заранее спасибо.

Что я уже пробовал:

USE [ChequeManager]
GO
/****** Object:  StoredProcedure [dbo].[Insertupdatebankcheques_iu]    Script Date: 06/17/2017 09:10:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
    ALTER procedure [dbo].[Insertupdatebankcheques_iu]  
   (@bank_Id int   
   ,@bankslno int
  ,@bankChqstartno nvarchar(6)  
  ,@bankChqlvscount smallint  
  ,@bankChqendno nvarchar(6)
  ,@bank_Stat  bit
  ,@InsUpdt bit)  
  as  
  begin 
   declare @lastcheueno as int
   declare @chqlastno as int 
   select @lastcheueno= max([ChequeNo]) FROM [ChequeManager].[dbo].[Cheques] where [bank_Id]=@bank_Id  
  SELECT @chqlastno= [bank_Chqendno]  FROM [ChequeManager].[dbo].[bankcheques] where bank_Id=@bank_Id and bank_Slno=@bankslno 
   if(@InsUpdt=1)
  begin    
  if not exists(select bank_Id,bank_Chqstartno
      FROM [ChequeManager].[dbo].[bankcheques]
     where bank_Id=@bank_Id)
  begin
 INSERT INTO [ChequeManager].[dbo].[bankcheques]  
           (bank_Id,
           bank_Slno,
           [bank_Chqstartno]  
           ,[bank_Chqlvscount]  
           ,[bank_Chqendno]
           ,bank_Stat)  
             
           values( @bank_Id,
           @bankslno
            ,@bankChqstartno   
           ,@bankChqlvscount  
           ,@bankChqendno,
           @bank_Stat)  
  end  
  end
  if(@InsUpdt=0)  
  begin     
  if not exists(select chqs_Chequeno
      FROM [ChequeManager].[dbo].[chequedetails]
     where bank_Id=@bank_Id)
  begin
  UPDATE [ChequeManager].[dbo].[bankcheques]  
  set bank_Chqstartno=@bankChqstartno,
  bank_Chqlvscount=@bankChqlvscount,
  bank_Chqendno=@bankChqendno,
      [bank_Stat]=@bank_Stat
      ,[bank_Mstmp] = getdate()  
       WHERE bank_Id=@bank_Id  and [bank_Slno]=@bankslno
  end   
  end     
 if exists(select chqs_Chequeno FROM [ChequeManager].[dbo].[chequedetails] where bank_Id=@bank_Id)
  begin
  if(@chqlastno==@lastcheueno)
  begin
 UPDATE [ChequeManager].[dbo].[bankcheques]  
  set  [bank_Stat]=@bank_Stat
      ,[bank_Mstmp] = getdate()  
       WHERE bank_Id=@bank_Id  and [bank_Slno]=@bankslno
 end
 end
 end

1 Ответов

Рейтинг:
7

OriginalGriff

Смотреть здесь:

if(@chqlastno==@lastcheueno)
SQL не использует "= = "для условных выражений, вместо этого он использует"=".


Member 13153537

Спасибо за помощь, теперь это исправлено.

OriginalGriff

Пожалуйста!
(Я сам делал то же самое оооочень много раз!)

Member 13153537

Я создал хранимую процедуру в mysql в том, что я создал обработчик. один-это обработчик 1064, другой-1264.1064 работает нормально, но 1264 не работает.У вас есть знания по mysql, пожалуйста, помогите мне заранее спасибо.


ОГРАНИЧИТЕЛЬ $$
Создайте процедуру insert_article_tags_2(в article_id INT, в tag_id INT)
НАЧАТЬ

объявить обработчик выхода для sqlexception
выберите "вызванное исключение sql".;


ОБЪЯВИТЬ ОБРАБОТЧИК ВЫХОДА ДЛЯ 1062

Выберите "вызван код ошибки MySQL 1062".;

ОБЪЯВИТЬ ОБРАБОТЧИК ВЫХОДА ДЛЯ 1264

Выберите "исключение из диапазона".;


-- вставить новую запись в article_tags
Вставить в article_tags(article_id, tag_id)
Значения (article_id,tag_id);

КОНЕЦ

-- показывает правильную ошибку 1062

вызов insert_article_tags_2 (1,1)


--он не показывает вне зоны действия errror
вызов insert_article_tags_2(1555555555555,1877777755555555555)