【发布时间】:2014-04-20 02:10:40
【问题描述】:
我正在尝试从可能包含批处理分隔符(GO 关键字)的 Ruby/DBI 文件中运行 MS SQL 脚本。整个脚本被包装在一个事务中,因此脚本中的任何错误都会导致回滚.
scriptContents = File.read(@path)
SqlDb.conn['AutoCommit'] = false
begin
SqlDb.conn.do scriptContents
SqlDb.conn.commit
rescue Exception
SqlDb.conn.rollback
@@log.error "Executing #{@path} resulted in error. Transaction has been rolled back: #{$!}"
end
SqlDb.conn['AutoCommit'] = true
执行一个包含GO的简单脚本,如:
PRINT 'this script is pointless'
GO
SELECT 1
导致以下错误:
ERROR SqlUpgradeScript : 执行 test/noop.sql 导致错误。事务已回滚:37000 (102) [Microsoft][ODBC SQL Server Driver][SQL Server]'GO' 附近的语法不正确。
删除GO 会导致脚本成功运行。
使用 Ruby/DBI 运行可能包含多个批处理的 SQL 脚本,同时仍将整个脚本作为单个事务运行的最简洁方法是什么?
【问题讨论】:
标签: ruby sql-server dbi