【发布时间】:2019-08-13 09:56:10
【问题描述】:
我不是 SQL 高级程序员,也许我的问题很愚蠢,但我在 google 中没有找到答案。我们有一些用于实现更改包的 SQL 结构:
...
BEGIN TRY
BEGIN TRANSACTION;
<User Code Is Here>
...
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
...
END CATCH;
...
我怎样才能正确放置 CREATE TRIGGER 块链而不是 <User Code Is Here>:
-- Table1
CREATE TRIGGER trTable1_Dates ON dbo.Table1
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
...
SET NOCOUNT OFF;
END
GO
...
-- TableN
CREATE TRIGGER trTableN_Dates ON dbo.TableN
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
...
SET NOCOUNT OFF;
END
GO
目的是创建所有触发器或不创建任何触发器,如果失败,则在 CATCH 代码块中打印消息。
已编辑
错误是:
- 在第一个触发器的
BEGIN:SQL80001:“BEGIN”附近的语法不正确。期待外部。 - 第一次触发后,
GO:SQL80001:'GO' 附近的语法不正确。 -
END TRY:SQL80001:“TRY”附近的语法不正确。期待对话。 -
END CATCH: SQL80001: 'CATCH' 附近的语法不正确。期待对话。
【问题讨论】:
-
如果在
的位置添加所有的 create... 脚本,它不起作用吗? -
@GeorgeMenoutis 不,它没有。我会在 Edited 部分写一个错误
-
您使用的是什么平台和版本?我在sql server上没见过这种错误...
-
Visual Studio 2017 (v 15.9.9) 或 SSMS v 17.9 - 两种环境都有错误
标签: sql-server tsql transactions try-catch database-trigger