begin..end的问题
CREATE PROCEDURE DelRowByBoardID
  @TableName nvarchar(50),
  @BoardID INT,
  @ParentID INT,
  @Depth smallint,
  @PrevID smallint,
  @NextID smallint
AS
BEGIN
  SET NOCOUNT ON
  SET XACT_ABORT ON
  BEGIN TRANSACTION
  Execute('DELETE from '+@TableName+' WHERE BoardID='+@BoardID+'')
  IF @Depth > 0
    EXEC('UPDATE '+@TableName+' SET child=child-1 WHERE BoardID='+@ParentID+'')  
  IF @PrevID > 0
    EXEC('UPDATE '+@TableName+' SET NextID='+@NextID+' WHERE BoardID='+@PrevID+'')
  IF @NextID > 0
    EXEC('UPDATE '+@TableName+' SET PrevID='+@PrevID+' WHERE BoardID='+@NextID+'')
  COMMIT TRANSACTION
  RETURN 0
END
GO

解决方案 »

  1.   

    --1、将数值型变量转换为varchar后再连接到串中
    --2、将每个串select出来,看看能否执行CREATE PROCEDURE DelRowByBoardID
    @TableName nvarchar(50),
    @BoardID INT,
    @ParentID INT,
    @Depth smallint,
    @PrevID smallint,
    @NextID smallint
    AS
    SET NOCOUNT ON
    SET XACT_ABORT ON
    BEGIN TRANSACTION declare @s varchar(8000) set @s='DELETE from '+@TableName+' WHERE BoardID='+ cast(@BoardID as varchar(100))+''
    EXEC (@s)
    select @s IF @Depth > 0
    BEGIN
    set @s='UPDATE '+@TableName+' SET child=child-1 WHERE BoardID='+ cast(@ParentID as varchar(100))+''
    EXEC(@s)
    select @s
    END

    IF @PrevID > 0
    BEGIN
    set @s='UPDATE '+@TableName+' SET NextID='+@NextID+' WHERE BoardID='+ cast(@PrevID as varchar(100))+''
    EXEC(@s)
    select @s
    END
    IF @NextID > 0
    BEGIN
    set @s='UPDATE '+@TableName+' SET PrevID='+@PrevID+' WHERE BoardID='+ cast(@NextID as varchar(100))+''
    EXEC(@s)
    select @s
    END COMMIT TRANSACTION
    RETURN 0
    GO