抱歉 说得太夸张了. 实际上应该说要写一个存储过程,让这个存储过程返回一个记录重复的错误!
一个封装后的程序会调用这个存储过程,但是无论我怎么写这个存储过程,程序都无法得到错误码.存储过程代码如下: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 ); //也不行所以想请大家提供一些返回错误方法,谢谢! 只要得到捕捉到这个错误结果, 立即给分!!
一个封装后的程序会调用这个存储过程,但是无论我怎么写这个存储过程,程序都无法得到错误码.存储过程代码如下: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 ); //也不行所以想请大家提供一些返回错误方法,谢谢! 只要得到捕捉到这个错误结果, 立即给分!!
解决方案 »
- 求解释一条sql语句delete from #data_rp_teledata where type<>2
- sql语句改变字段顺序
- 我怎样得出1-24小时的数据
- 把一个表的数据全部删除以后有什么办法把key清掉
- 求SQL语句 创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作
- 求优化方案
- DROP TABLE IF EXISTS 发生错误,麻烦各位大侠给看看
- 在sql server中合并数据表
- 有一列是按时间的排的写成这样20010101.001,以此类推,我想返回前八位数和当前日期一样的数据!该怎么写?
- 求一个SQL 或者是 视图....
- 求“查询某条记录关于某字段的排名”sql
- 请问一个替换的语句
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 行)
try catch应该可以抓到一些error message@@error 只是返回错误代码
但是封装的程序却得不到错误码.
晕,这个得用OUTPUT参数来获取,或用程序来TRY CATCH吧
谢谢SQL77 , 目前目标是从这个封装程序的错误输出上得到信息,不是改那个程序. OUTPUT的方法是从程序的正常出口输出,然后捕获它. 也不符合我的要求,所以我才说让它崩溃
A.当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。
B.当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。
如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。
代码如下: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')