--你看一下这两个示例吧
--示例1:
use northwind
go
declare @str varchar(100)
set @str='delete orders where orderid=10248'
exec (@str)
if @@error<>0 select @@error
--示例2:
use northwind
go
declare @str varchar(100)
set @str='delete orders where orderid=10248'
exec (@str)
select @@error
select @@error

解决方案 »

  1.   

    你可以这样做, 定义一个int变量@error
    在exec (@sSQL)后,就将@@error的值存放在@error中.
    这样的话,就不怕@@error这个全局变量被修改了.
    然后根据@error的值是不是为0,进行下一步的操作
      

  2.   

    to: 
    不行啊。
    防到存储过程中一执行,还是提示错误啊,错误信息为:
    服务器: 消息 547,级别 16,状态 1,行 1
    DELETE 语句与 COLUMN REFERENCE 约束 'FK_Order_Details_Orders' 冲突。该冲突发生于数据库 'Northwind',表 'Order Details', column 'OrderID'。
    语句已终止。
      

  3.   

    那是因为这 orderid=10248 这列被 另一个表 引用。
    但是并没有建立级联删除。
    就提示错误了。
      

  4.   

    to  prettyBoy1(冰鱼):那个示例就是为了显示出错时的处理啊。出错有两种。编译错误的话,无条件回滚。而如果一条语句发生运行出错的话,它是不会影响到后继语句的执行的。你可以在删除时判断@@error的值,并决定要不要回滚。
    这个我想你也是会的。如果你不想让它显示出那些出错语句的话,那么就比较麻烦了。
    可能修改系统设置的话,可以。
    但是完全没有必要啊。还有一种方法就是在删除前预先判断一下,或是建立一个delete触发器。
      

  5.   

    你的语句会发生delete等违反完整性约束的运行错误。这样的话,无论如何你都要预先处理一下啊。也就是说,在删除时,判断一下该记录是否被其它表参照。也许,你会想,系统有没有提供这种功能:判断某条语句是否可以正常执行。没有,至少目前为止,我还没有见到过。
      

  6.   

    谢谢 filebat(Mark) 。
    你说的对,其实我就是想知道:“系统有没有提供这种功能:判断某条语句是否可以正常执行”
    现在我明白了。