我嘗試在 SQL Server 管理作業室中實作 T-SQL try catch。這是我的代碼:
BEGIN
BEGIN TRY
alter table [SalesLT].[ProductModel]
add testtimestamp123 timestamp
END TRY
BEGIN CATCH
RAISERROR('MY CUSTOMIZED ERROR MESSAGE',16,1)
END CATCH
END;
我的期望是,如果我在 sql server management studio 中運行此代碼(因為我在此表中有一個帶有時間戳資料型別的列),我會收到我的自定義訊息,但我收到此訊息:
A table can only have one timestamp column. Because table 'ProductModel' already has one, the column 'testtimestamp123' cannot be added.
我應該怎么做才能用自定義訊息捕獲我的例外?
uj5u.com熱心網友回復:
并非 T-SQL 中的所有例外都可以“捕獲”。這是其中之一。
如果您不想使用“動態”statemnt,您可以EXISTS針對sys物件,然后THROW如果該列已經存在,您可以自定義錯誤:
CREATE TABLE dbo.SomeTable (Id int,
rowversion rowversion); --Don't use timestamp, it's deprecated
GO
IF NOT EXISTS (SELECT 1
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
WHERE s.name = N'dbo'
AND t.name = N'SomeTable'
AND c.name = N'rowversion')
ALTER TABLE dbo.SomeTable ADD rowversion rowversion;
ELSE
THROW 65762, N'A column of the name you want to create already exists. I can''t do this. Sorry :(', 10;
GO
DROP TABLE dbo.SomeTable;
uj5u.com熱心網友回復:
將該 sql 陳述句轉換為動態 SQL,然后將在執行點而不是在決議時拋出錯誤。例如像這樣的東西
DECLARE @sql nvarchar(max) = 'alter table demo add testtimestamp123 timestamp ';
BEGIN TRY
EXEC sp_executesql @sql
END TRY
BEGIN CATCH
RAISERROR('MY CUSTOMIZED ERROR MESSAGE',16,1)
END CATCH
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474590.html
