У меня есть программа python, которая использует pypyodbc для взаимодействия с базой данных MSSQL. Хранимая процедура создается в MSSQL и запускается через python. Если я выполняю хранимую процедуру только один раз (через python), проблем нет. Однако, когда он выполняется несколько раз в цикле for, я получаю следующую ошибку:pypyodbc - Неверное состояние курсора при выполнении хранимой процедуры в цикле
pypyodbc.ProgrammingError: ('24000', '[24000] [Microsoft] [Собственный клиент SQL Server 11.0] Неверное состояние курсора')
Мои питона детали код ниже:
connection_string_prod = 'Driver={SQL Server Native Client 11.0};Server=PSCSQCD1234.TEST.AD.TEST.NET\SQLINS99,2222;Database=Test;Uid=python;Pwd=python;'
connection_prod = pypyodbc.connect(connection_string_prod)
cursor_prod = connection_prod.cursor()
get_files_to_load_query = "Get_Files_To_Load"
files_to_load = cursor_prod.execute(get_files_to_load_query)
for file_name in files_to_load:
load_query = "Load_Query_Stored_Proc @File_Name = '" + file_name + "'"
cursor_prod.execute(load_query)
cursor_prod.commit()
cursor_prod.close()
connection_prod.close()
в некоторых постах, было предложено использовать «SET NOCOUNT ON» в верхней части процедуры SQL хранится. Я уже это сделал, и это не помогло.
Ниже приведен код простой хранимой процедуры, которая вызывает вопрос:
CREATE PROCEDURE [dbo].[Test]
AS
SET NOCOUNT ON
INSERT INTO Test(a)
SELECT 1
Почему выполнение хранимой процедуры в пределах цикла только вызывает проблему?
Просьба сообщить.
Спасибо!
Есть ли у вас курсор в хранимой процедуре? Можете ли вы показать код хранимой процедуры? –
У меня нет курсора внутри хранимой процедуры. Включенный образец хранит proc, который вызывает проблему в обновленном сообщении. –
Не уверен, что это лучшее решение, но я смог решить свою собственную проблему, создав отдельное соединение и получив connection1, чтобы получить список файлов для загрузки, а connection2 вызовет хранимую процедуру для фактической загрузки в цикле for. Если это не ясно, и это поможет любому, я могу предоставить обновленный рабочий код. –