我使用pyodbc相当短的时间,现在面临从执行一些视图创建的文件中应用sql脚本的问题。对于采用SQL文件我用的样品从另一个线程 - Follow up: Execute .sql files from python有没有问题,大多数我的SQL脚本,但是这一个导致了一个问题:脚本的pyodbc和插入语句
部分:
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语句。所以按照我应用它的方式,它不起作用。来自另一个线程的示例将GO文件分为GO之间的块并应用它们。因此,'分别应用TMP_VIEWS select * from TMP_QUERY_SQL'和其他部分。它看起来像pyodbc或驱动程序实际上并没有等待服务器上的插入完全执行,并且第二个块在执行插入完成之前执行。因此,我在TMP_VIEWS中创建了非常随意的视图数量并且未创建查询。我有自动提交,并试图在查询执行后添加额外的提交 - 这没有帮助。唯一有用的 - 在GO之间添加time.sleep(0.2)执行此批处理。看起来像一些不同步的电话。谁面临同样的问题或者我的尝试可能会出错?可能是一些解决方法?
谢谢!