有一个存储过程,代码如下:
create proc deleteCate(@cateId int )
as
delete from comment where newsId in (select newsId from news where cateId=@cateId)
delete from news where cateId=@cateId
delete from category where cateId=@cateId
其中表category中的cateId对应news表中的外键cateId , news表中的newsId对应comment表中的外键newsId,在执行过程中出错了,显示是:
消息 207,级别 16,状态 1,过程 deleteCate,第 3 行
列名 'cateId' 无效。
消息 207,级别 16,状态 1,过程 deleteCate,第 4 行
列名 'cateId' 无效。
如果创建一个触发器:
create TRIGGER [deleteCate]
   ON  [dbo].[category]
   instead of  DELETE
AS 
declare @cateId int
select @cateId = cateId from deleted
delete from comment where newsId in (select newsId from news where cateId=@cateId )
delete from news where cateId=@cateId
delete from category where cateId=@cateId
那么出错的提示也是一样的:
消息 207,级别 16,状态 1,过程 deleteCate,第 7 行
列名 'cateId' 无效。
消息 207,级别 16,状态 1,过程 deleteCate,第 8 行
列名 'cateId' 无效。不知道是什么原因,请高手帮助改正.

解决方案 »

  1.   

    create proc deleteCate(@cateId int ) 
    as declare @sql varchar(2000)
    begin
    set @sql='delete from comment where newsId in (select newsId from news where cateId='''+@cateId+''')'
    exec(@sql)
    set @sql='delete from news where cateId='''+@cateId+''''
    exec(@sql)
    set @sql='delete from category where cateId='''+@cateId+''''
    exec(@sql)end
      

  2.   

    delete from news where cateId=@cateId
    delete from category where cateId=@cateId 这两句有错,这两个表中没有cateId列,检查一下吧。