异常处理问题,无法获取异常

lengjing126 2011-09-23 02:38:34

DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)

BEGIN TRY
SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH



请教:为什么SELECT ERROR_MESSAGE()无法获取异常信息。
...全文
89 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
加上SELECT 我的语句就无法执行了。
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lengjing126 的回复:]

SQL code


DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)
DECLARE @ErrMessage NVARCHAR(MAX)
SET @ErrMessage=''
BEGIN TRY
BEGIN TRAN
SET @TargetDir='L:\DRI'
SET @cmd……
[/Quote]

我想把异常保存在变量里!然后用SELECT 显示出来
--小F-- 2011-09-23
  • 打赏
  • 举报
回复
--在最前面加上 select

DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)

BEGIN TRY
SET @TargetDir='L:\DRI'
SET @cmd='select master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH

/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
无法绑定由多个部分组成的标识符 "master.dbo.xp_create_subdir"。

(1 行受影响)
*/
--小F-- 2011-09-23
  • 打赏
  • 举报
回复
我运行的结果

DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)

BEGIN TRY
SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH

/*p_create_subdir() 返回了错误 3,“系统找不到指定的路径。”*/
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
master.dbo.xp_create_subdir N'D:\DRI'
--小F-- 2011-09-23
  • 打赏
  • 举报
回复
问题应该出在

SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)


这3句上面
你 print @cmd出来看看结果是什么?
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
而且没有异常,他也会输出!
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
error_message() 怎么变成 raiserror 的出数值了。
--小F-- 2011-09-23
  • 打赏
  • 举报
回复

DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)

BEGIN TRY
SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
go
raiserror('生成一个错误消息',11,1)

END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
select error_message() as 错误消息,
error_severity() as严重级别,
error_state() as state;

END CATCH



--这样看看有没有结果?
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
@cmd 赋值为 ‘SELECT 1/0’可以得到异常信息。
-晴天 2011-09-23
  • 打赏
  • 举报
回复
把 @cmd 随便赋点什么字符看看.
-晴天 2011-09-23
  • 打赏
  • 举报
回复
或许是没错,但没有符合条件的记录.
lengjing126 2011-09-23
  • 打赏
  • 举报
回复


DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)
DECLARE @ErrMessage NVARCHAR(MAX)
SET @ErrMessage=''
BEGIN TRY
BEGIN TRAN
SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT @ErrMessage=@ErrMessage+ISNULL(ERROR_MESSAGE(),'')
ROLLBACK
END CATCH

SELECT @ErrMessage



我是想得到@ErrMessage的信息!
lengjing126 2011-09-23
  • 打赏
  • 举报
回复
还是SELECT 不出来错误信息!
AcHerat 元老 2011-09-23
  • 打赏
  • 举报
回复

DECLARE @cmd NVARCHAR(MAX)
DECLARE @TargetDir NVARCHAR(MAX)

BEGIN TRY
BEGIN TRAN
SET @TargetDir='L:\DRI'
SET @cmd='master.dbo.xp_create_subdir N''' + REPLACE(@TargetDir,'''','''''') + ''''
EXEC(@cmd)
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
ROLLBACK
END CATCH


???

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧