我使用 pyodbc 的时间很短,现在面临从执行一些视图创建的文件应用 sql 脚本的问题。为了应用 sql 文件,我使用来自另一个线程的示例 -跟进:从 python 执行 .sql 文件 我的大多数 sql 脚本都没有问题,但这会导致问题:
脚本的一部分:
insert into TMP_VIEWS select * from TMP_QUERY_SQL
go
begin
declare @SQL_CMD varchar(4000);
declare @CNT int;
set @CNT = (select count(1) from TMP_VIEWS);
while @CNT > 0
begin
set @SQL_CMD = (select top 1 SQL_CMD from TMP_VIEWS order by SQL_CMD);
print 'Executing: ' + @SQL_CMD;
EXEC(@SQL_CMD)
delete from TMP_VIEWS where @SQL_CMD = SQL_CMD;
set @CNT = (select count(1) from TMP_VIEWS);
end
end
如您所见,它执行从另一个表插入到表中的 SQL 语句。所以在我应用它的方式上它不起作用。来自另一个线程的样本将 sql 文件分成 GO 之间的块并应用它们。所以'insert into TMP_VIEWS select * from TMP_QUERY_SQL'分别应用,然后是其他部分。看起来 pyodbc 或驱动程序实际上并没有等待服务器上完全执行插入,而是在实际插入完成之前执行第二个块。结果,我在 TMP_VIEWS 中创建了相当数量的视图,而未创建的查询仍然存在。我有自动提交并尝试在查询执行后添加额外的提交 - 这没有帮助。唯一有帮助的 - 在 GO 之间执行此批次之间添加 time.sleep(0.2)。看起来像一些异步调用。谁面临同样的问题或我的尝试可能有什么问题?可能有一些解决方法?
谢谢!