저는 pyodbc를 매우 짧은 기간 사용하고 있으며 일부보기 생성을 수행하는 파일에서 SQL 스크립트를 적용하는 문제에 직면했습니다. SQL 파일을 적용하는 동안 나는 다른 스레드에서 샘플을 사용 - Follow up: Execute .sql files from python 내 SQL 스크립트의 대부분에 아무런 문제가 없다 그러나 이것은 문제의 원인 : 스크립트의pyodbc 및 insert 문
부분 : 보시다시피
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 사이의 블록으로 분리하여 적용합니다. 따라서 'TMP_VIEWS에서 select * from TMP_QUERY_SQL'을 별도로 적용한 다음 다른 부분을 적용하십시오. 그것은 pyodbc처럼 보입니다. 또는 드라이버는 실제로 서버에 insert의 전체 실행을 기다리지 않고 actuall insert가 comlete되기 전에 두 번째 블록이 실행됩니다. 결과적으로 나는 무작위로 생성 된 뷰를 생성하고 TMP_VIEWS에는 비 한정 쿼리가 남아있게됩니다. 나는 자동 커밋을하고 쿼리 실행 후 추가 커밋을 추가하려고 시도했다. 도움이되는 유일한 방법은 GO 사이에이 일괄 처리를 실행하려면 time.sleep (0.2)를 추가하는 것입니다. 비동기 호출처럼 보입니다. 같은 문제에 직면 한 사람이나 시도에서 잘못되었을 수있는 사람은 누구입니까? 몇 가지 해결 방법이있을 수 있습니까?
감사합니다.