日期:2014-05-18  浏览次数:20519 次

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

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()无法获取异常信息。

------解决方案--------------------
SQL code

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



--这样看看有没有结果?

------解决方案--------------------
问题应该出在 

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


这3句上面
你 print @cmd出来看看结果是什么?
------解决方案--------------------
SQL code
我运行的结果

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,“系统找不到指定的路径。”*/

------解决方案--------------------
SQL code
--在最前面加上 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 行受影响)
*/