抱歉 说得太夸张了. 实际上应该说要写一个存储过程,让这个存储过程返回一个记录重复的错误!
一个封装后的程序会调用这个存储过程,但是无论我怎么写这个存储过程,程序都无法得到错误码.存储过程代码如下:create PROCEDURE [db_owner].[sd_insert_request](@source_system VARCHAR(10), @access_code CHAR(12))  AS-- To generate duplicate key
create table #BPay_request(Primarykey int not null, referencenum varchar(20))
create unique index BP_PK on #BPay_request(Primarykey)
insert into #BPay_request(Primarykey, referencenum) values(12345678,'1234')
insert into #BPay_request(Primarykey, referencenum) values(12345678,'5678')
print @@error
在MS SQL里运行这个存储过程,会提示: Cannot insert duplicate key row in object 'dbo.#BPay_request' with unique index 'BP_PK'.
但是封装的程序却得不到错误码. 那个程序没有问题,例如我只要去掉存储过程的一个输入参数,那个程序就会提示输入参数不对列出目前我已经尝试过的输出错误代码的方法:
1. print @@error          //不行,上面代码去掉这句也不行
2. RAISERROR ('Duplicate key',-20020,1 );     //也不行所以想请大家提供一些返回错误方法,谢谢! 只要得到捕捉到这个错误结果, 立即给分!!

解决方案 »

  1.   

    RAISERROR  应该可以吧,在程序里用 try...catch 可以捕获到的
      

  2.   

    create PROCEDURE [db_owner].[sd_insert_request] 
    AS-- To generate duplicate key
    BEGIN
    create table #BPay_request(Primarykey int not null, referencenum varchar(20))
    create unique index BP_PK on #BPay_request(Primarykey)
    insert into #BPay_request(Primarykey, referencenum) values(12345678,'1234')
    insert into #BPay_request(Primarykey, referencenum) values(12345678,'5678')
    SELECT  @@error
    END
    EXEC [db_owner].[sd_insert_request]
    (所影响的行数为 1 行)服务器: 消息 2601,级别 14,状态 3,过程 sd_insert_request,行 9
    不能在具有唯一索引 'BP_PK' 的对象 '#BPay_request_______________________________________________________________________________________________________000100000016' 中插入重复键的行。
    语句已终止。
                
    ----------- 
    2601(所影响的行数为 1 行)
      

  3.   

    程序里 
    try catch应该可以抓到一些error message@@error 只是返回错误代码
      

  4.   

    在MS SQL里运行这个存储过程,会提示: Cannot insert duplicate key row in object 'dbo.#BPay_request' with unique index 'BP_PK'. 
    但是封装的程序却得不到错误码.
    晕,这个得用OUTPUT参数来获取,或用程序来TRY CATCH吧
      

  5.   


    谢谢SQL77 , 目前目标是从这个封装程序的错误输出上得到信息,不是改那个程序. OUTPUT的方法是从程序的正常出口输出,然后捕获它. 也不符合我的要求,所以我才说让它崩溃
      

  6.   


    A.当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 
    B.当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。
    如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。
      

  7.   

    谢谢楼上诸位  写在事务里,问题解决   马上结贴!!!
    代码如下:create PROCEDURE [db_owner].[sd_insert_request](@source_system VARCHAR(10), @access_code CHAR(12))  ASbegin   tran  BPay     --开始执行事务 
    -- To generate duplicate key
    create table #BPay_request(Primarykey int not null, referencenum varchar(20))
    create unique index BP_PK on #BPay_request(Primarykey)
    insert into #BPay_request(Primarykey, referencenum) values(12345678,'1234')
    insert into #BPay_request(Primarykey, referencenum) values(12345678,'5678')