我们可以在GO
语句中多次使用语句吗SQL Transaction
?我的T-SQL脚本很长,我想在中运行它SQL Transaction
。如果一切顺利,那么我将承诺否则将回滚。
但是,在运行该查询时,出现类似的错误'create function must be the only statement in the batch'
。当我在其中创建和删除许多功能和过程时。
我没有GO
在脚本中的任何地方使用过。我的问题是-
我可以GO
在该长脚本中使用多次语句。因为GO
创建一个批处理,并且如果该批处理第一次成功执行但下次失败,那么该rollback transaction
语句是否能够实际回滚已执行的语句?
我的脚本结构如下:
PRINT 'Transaction Started'
BEGIN TRY
BEGIN TRAN
Drop Function
....
....
Create Function
....
....
Drop Procedure
....
....
Lots of statements
....
....
COMMIT TRAN
PRINT 'Transaction Succeeded'
END TRY
BEGIN CATCH
PRINT 'Transaction Failed'
IF(@@TRANCOUNT > 0)
ROLLBACK TRAN
END CATCH
我正在创建此脚本,以便在单个脚本中将一些更改从newDB迁移到oldDB。
您正在混合概念。GO
不是Transact-SQL概念,不是语言的一部分,也不为SQL Server所理解。GO
是工具 批定界符
。sqlcmd.exe
默认情况下,SSMS和SSMS都使用GO
批次分隔符。批次定界符用于标识SQL源文件中的各个 批次
。客户端工具一次向服务器发送一批(当然,省略定界符)。
事务可以跨越批次。TRY / CATCH块不能。CREATE / ALTER语句必须是批处理中唯一的语句(注释不是语句,函数过程体中包含的语句也可以包含)。
类似的事情你想做的事,可以通过启动交易来实现和abortign遇见第一个错误的执行(-b
在sqlcmd.exe
启动或使用:on error exit
在SSMS)。
但是在长事务中执行DDL是行不通的。特别是如果您打算将其与DML混合使用。我必须调查的 大多数 损坏都来自这种组合(Xact,DDL +
DML,回滚)。我强烈建议不要这样做。
安全地部署架构更新的唯一方法是在出现问题时进行备份,部署,从备份还原。
请注意,Dan推荐的(动态SQL)是有效的,因为它sp_executesql
开始了一个新的内部批处理。该批次将满足CREATE / ALTER限制。
我之前已经实现过几次Spring批处理,但它设计为一天只运行一次。 现在,我有了一个新的要求,每当记录插入表中时,我都需要开始批处理。当插入新记录时,它将启动作业,批处理将生成PDF并将其保存在存储库中,并向用户发送邮件。 我不知道如何设计一天运行多次的spring批处理,或者在这种情况下使用spring批处理是否正确。有人能解释一下吗。谢谢
在我的Spring启动kafka发布者应用程序中,我希望支持以字符串(json)或字节格式发布消息,因为我希望同时支持json和avro。但spring boot中的Kafka模板让我们只定义其中一个模板。有没有一种方法可以同时使用两个模板或任何其他方式来提供对json和avro的支持?
问题内容: 我知道Python提供了API,因此您可以在C代码中调用Python解释器,但是我想要的却是相反的。 我的程序需要使用一些C API,所以代码必须用C编写。但是我也想用Python打包程序。这意味着我想在Python中调用这些C函数或可执行文件。那可能吗? 如果我希望C代码成为一个库,这意味着我将它与Python 中的可能的链接一起使用,该怎么做?那可能吗?如果我将C代码写入可执行文件
本文向大家介绍我们可以在MySQL中使用ORDER BY NULL吗?,包括了我们可以在MySQL中使用ORDER BY NULL吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以做到 注–在MySQL 5.7之前,ORDER BY NULL很有用,但在MySQL 8.0中,例如,最后不需要指定ORDER BY NULL以抑制隐式排序。 让我们首先创建一个表- 使用插入命令在表中插入一些
问题内容: 嗨,大家好,我需要在我的数据库项目中使用纯SQL查询,同时我想使用ASP.net MVC,这样我才能学习一种新技术!我可以在不使用“ LINQ to SQL”的情况下将SQL与ASP.net MVC一起使用吗?我仍在学习,如果使用OLD SCHOOL的方法如此愚蠢,我感到抱歉,但我的老师坚持认为他想查看PURE SQL查询 问题答案: 是的。您可以为模型层使用任何内容。注意,您也可以将
我的项目中有普通的jdbc连接池,并使用ejb进行事务处理。现在我想将事务管理更改为Spring事务管理,但我不想为此创建单独的数据源,我想使用相同的普通连接池。 有可能吗? 下面是我的Springbean for transaction(数据源是空的,因为我不知道如何从普通的jdbc连接池进行设置)