过去几天我一直在SQL相关论坛上跳过(我是新的)并且我已经取得了一些进展!但是,我似乎无法解决这个问题。这是我的疑问:
USE EpiworksTest;
BEGIN TRANSACTION [tran3]
BEGIN TRY
INSERT [Catalog].[TaskDefinition] ([ID], [WIPDesc], [SpecTable], [ResultsTable], [SpecFilePath], [SpecFileName], [SetupFilePath], [SetupFileName], [EWProduct], [Process], [Active], [CalcDur], [UnTimedEst], [ChamberUse], [DateCreated])
VALUES (1, N'wp', N'spec', N'0', NULL, NULL, NULL, NULL, N'ew', NULL, NULL, NULL, NULL, NULL, NULL);
SET IDENTITY_INSERT [Catalog].[TaskDefinition] OFF
INSERT [Catalog].[TaskStatus] ([ID], [Name], [Description])
VALUES (1, N'Static', N'wat');
COMMIT TRANSACTION [tran3]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [tran3]
END CATCH
我已经检查并重新检查了我的表格列 - 它们与此处的两个插页都匹配。 我的两张桌子目前都是空的。此查询表示它已成功完成,但即使我有两个插入,也没有更新行!有任何想法吗?我试过重新创建我的架构。 请问SQL"编译器?"告诉我它是否有错误我抓住或告诉我,如果它回滚任何变化?我有一种感觉,尝试/捕获或交易时有一些时髦的事情,因为那是我今天所知道的。感谢您的回复。
答案 0 :(得分:1)
默认情况下,IDENTITY_INSERT选项为OFF,因此如果您未将其设置为ON,则无需将其设置为off。我认为这是你想要做的事情。
USE EpiworksTest;
BEGIN TRY
BEGIN TRANSACTION [tran3];
SET IDENTITY_INSERT [Catalog].[TaskDefinition] ON;
INSERT [Catalog].[TaskDefinition] ([ID], [WIPDesc], [SpecTable], [ResultsTable], [SpecFilePath], [SpecFileName], [SetupFilePath], [SetupFileName], [EWProduct], [Process], [Active], [CalcDur], [UnTimedEst], [ChamberUse], [DateCreated])
VALUES (1, N'wp', N'spec', N'0', NULL, NULL, NULL, NULL, N'ew', NULL, NULL, NULL, NULL, NULL, NULL);
SET IDENTITY_INSERT [Catalog].[TaskDefinition] OFF;
INSERT [Catalog].[TaskStatus] ([ID], [Name], [Description])
VALUES (1, N'Static', N'wat');
COMMIT TRANSACTION [tran3];
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION [tran3];
END
SELECT ERROR_MESSAGE() AS [Error_Message]
,ERROR_LINE() AS [Error_Line]
,ERROR_NUMBER() AS [Error_Number]
,ERROR_SEVERITY() AS [Error_Severity]
END CATCH
答案 1 :(得分:1)
您正在抑制所有错误,因此您永远不会看到它们。这是一个非常严重的反模式,现在你知道为什么了。取消抑制错误。我建议你添加
THROW
到catch块,它重新抛出当前错误。错误通常应该冒出一个可以有意义地处理和记录它们的地方。