日期:2014-05-19  浏览次数:20416 次

请问这个存储过程语句问题出在哪里?
CREATE   PROCEDURE   [dbo].[mp_insert]  
AS
declare   @sYear   nchar(4)
declare   @sMonth   nchar(2)
declare   @sDate   nchar(7)


delete   from   table1

set   @sMonth=right( '00 '   +   convert(nchar(2),month(getdate())),2)
set   @sYear=convert(nchar(4),year(getdate()))
set   @sDate=@sYear   +   '/ '   +   @sMonth

if   @sMonth= '01 '  
begin  
        if   exists(select   *   from   table2   where   ....)

end

GO


以上语句居然报错:Error156:   Incorrent   syntax   near   the   keyword   'end '.
请问大家,问题出在哪里了?



------解决方案--------------------
begin
if exists(select * from table2 where ....)

end


最后这块
if判断下面没有语句

begin
if exists(select * from table2 where ....)
.....
end
------解决方案--------------------
CREATE PROCEDURE [dbo].[mp_insert]
AS
declare @sYear nchar(4)
declare @sMonth nchar(2)
declare @sDate nchar(7)


delete from table1

set @sMonth=right( '00 ' + convert(nchar(2),month(getdate())),2)
set @sYear=convert(nchar(4),year(getdate()))
set @sDate=@sYear + '/ ' + @sMonth

if @sMonth= '01 '
begin
if exists(select * from table2 )
print 1--指定
else
print 2

end
------解决方案--------------------
begin
if exists(select * from table2 where ....)

end
在这句的if语句的条件的西面必须要有处理语句,如果没有语句就要报错!
实在不想有处理语句,就象上面人说的用一条print语句或者Rollback transaction语句吧!
多行语句在执行体中必须要在begin...end中间.
注意一下语法就好了,
谢谢先~~~