提问人:Henrov 提问时间:11/16/2023 最后编辑:marc_sHenrov 更新时间:11/17/2023 访问量:51
为什么我在 try 中看不到实际的错误消息...抓住?[复制]
Why can I not see the actual errormessage in try...catch? [duplicate]
问:
在我试图将 插入到表中,但它总是给我错误的错误消息。它告诉我查看上一条消息。为什么?TRY...CATCH
ERROR_MESSAGE()
请参见以下代码:
IF OBJECT_ID('coolguy.joyhnybravo') IS NOT NULL
DROP TABLE [coolguy].[joyhnybravo]
CREATE TABLE [coolguy].[joyhnybravo]
(
[hair] [int] NOT NULL,
[sunglasses] [int] NOT NULL,
)
INSERT INTO [coolguy].[joyhnybravo]
select 1,1
union all
select 1,1
SELECT * FROM [coolguy].[joyhnybravo]
BEGIN TRY
ALTER TABLE coolguy.joyhnybravo
ADD PRIMARY KEY (hair, sunglasses)
END TRY
BEGIN CATCH
SELECT
GETDATE(), 'ERROR', 'PK (hair, sunglasses) could not be set for coolguy.joyhnybravo
| STATEMENT: ALTER TABLE coolguy.joyhnybravo ADD PRIMARY KEY (hair, sunglasses)''
| ERROR_NUMBER(): '+CAST(ISNULL(ERROR_NUMBER(),'') AS VARCHAR(10)) +'
| ERROR_SEVERITY(): '+CAST(ISNULL(ERROR_SEVERITY(),'') AS VARCHAR(10)) +'
| ERROR_STATE(): '+CAST(ISNULL(ERROR_STATE(),'') AS VARCHAR(10)) +'
| ERROR_PROCEDURE(): '+CAST(ISNULL(ERROR_PROCEDURE(),'') AS SYSNAME) +'
| ERROR_LINE(): '+CAST(ISNULL(ERROR_LINE(),'') AS VARCHAR(1000)) +'
| ERROR_MESSAGE(): '+CAST(ISNULL(ERROR_MESSAGE(),'') AS VARCHAR(1000))
END CATCH
这是我得到的:
() ERROR_MESSAGE(): 无法创建约束或索引。请参阅以前的错误。
但这就是我在尝试之外执行语句时得到的......抓住
ALTER TABLE coolguy.joyhnybravo
ADD PRIMARY KEY (hair, sunglasses)
消息 1505,级别 16,状态 1,第 17
行 CREATE UNIQUE INDEX 语句终止,因为发现对象名称“coolguy.joyhnybravo”和索引名称“PK__joyhnybr__CAF8A5F7EECF20F3”的键重复。重复的键值为 (1, 1)。消息 1750,级别 16,状态 1,第 17 行
无法创建约束或索引。请参阅以前的错误。
该声明已被终止。
我最想抓住的是这句话:
CREATE UNIQUE INDEX 语句终止,因为发现对象名称“coolguy.joyhnybravo”和索引名称“PK__joyhnybr__CAF8A5F7EECF20F3”的键重复。重复的键值为 (1, 1)。
怎么做呢?
答:
-3赞
Priya Maheshwari
11/17/2023
#1
Try the below --->
BEGIN CATCH
DECLARE @ERROR_MESSAGE NVARCHAR(2048) = ERROR_MESSAGE()
RAISERROR (@ERROR_MESSAGE,16,16)
END CATCH
OR below way --->
BEGIN CATCH
THROW;
END CATCH
and then use the select query outside the catch block
SELECT
GETDATE(), 'ERROR', 'PK (hair, sunglasses) could not be set for coolguy.joyhnybravo
| STATEMENT: ALTER TABLE coolguy.joyhnybravo ADD PRIMARY KEY (hair, sunglasses)''
| ERROR_NUMBER(): '+CAST(ISNULL(ERROR_NUMBER(),'') AS VARCHAR(10)) +'
| ERROR_SEVERITY(): '+CAST(ISNULL(ERROR_SEVERITY(),'') AS VARCHAR(10)) +'
| ERROR_STATE(): '+CAST(ISNULL(ERROR_STATE(),'') AS VARCHAR(10)) +'
| ERROR_PROCEDURE(): '+CAST(ISNULL(ERROR_PROCEDURE(),'') AS SYSNAME) +'
| ERROR_LINE(): '+CAST(ISNULL(ERROR_LINE(),'') AS VARCHAR(1000)) +'
| ERROR_MESSAGE(): '+CAST(ISNULL(ERROR_MESSAGE(),'') AS VARCHAR(1000))
Hope this helps!
评论
DBCC OUTPUTBUFFER