0

В этой хранимой процедуре я прочитал таблицу сторонних поставщиков с именем M_SopInsert.Нужна помощь для отладки хранимой процедуры T-SQL, которая имеет SQL-скрипты, хранящиеся в таблице

SQLScript это имя столбца и каждая запись в этой таблице содержит запрос SQL, который делает UPDATE, INSERT или DELETE.

Я вижу фактический скрипт, когда я его отлаживаю, используя Select (см. Ниже). Но сам скрипт не выполняется, и я не вижу никаких ошибок.

Я пробовал hardcoding UPDATE ниже, и он отлично работает.

В чем может быть проблема?

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
declare @sopScript nvarchar(1000) 

select SQLScript into #ControlTbl from M_SopInsert 
where soptype = @I_vSOPTYPE and sopnumbe = @I_vSOPNUMBE and lnitmseq = @I_vLNITMSEQ 

while exists (select * from #ControlTbl) 
begin 

    select top 1 @sopScript = SQLScript 
    from #ControlTbl 

    --exec executesql @sopScript = SQLScript 
    --select @sopScript 
    --EXEC sp_executesql @sopScript; 
    --EXEC sp_executesql "update SOPQty set QTYORDER = '17.89' where LNIT = '16'" 
exec sp_executesql @sopScript = SQLScript 
    delete from #ControlTbl where SQLScript = @sopScript 

end 
drop table #ControlTbl 
return (@O_iErrorState) 
+0

Синтаксическая ошибка, о которой вы сказали, что вы скорректировали ее работу, должна была дать Msg 2812, Не удалось найти хранимую процедуру «SQLScript». - это весь код, или это завернуто в 'TRY/CATCH 'или что-то еще? –

ответ

0

я заменил "EXEC sp_executesql @sopScript = SQLScript" с "Exec sp_executesql @sopScript", и она работала .. Я не знаю, какая разница, он будет делать.

3

Вы не видите никаких ошибок, так как у вас есть пустой улов. Это похоже на настройку будильника, а затем его отсоединение. Ошибка, которую вы, вероятно, получите, заключается в том, что вы не можете передать строку VARCHAR в sp_executesql - она ​​должна быть NVARCHAR. Попробуйте:

declare @sopScript Nvarchar(1000) 
-------------------^ 
+0

Я действительно удалил блок catch, но, поставив свой пост, я его не удалял. Таким образом, на данный момент нет блокировки. Также изменение на nvarchar не изменилось. По какой-то причине, когда у меня был варчар, нижняя строка не работала. exec executesql @sopScript = SQLScript – Anirudh

+0

@ Анируд. Отладка 101. Вы пытались просто выбрать из #ControlTbl вместо цикла и выполнения содержимого? Также может быть, что в таблицу #temp не было строк. Также может быть, что вы выполняете одну базу данных и проверяете, выполнялись ли команды на другом. В вашей строке подключения есть 'AttachDbFileName'? –

+0

Я заменил «exec sp_executesql @sopScript = SQLScript» на «exec sp_executesql @sopScript», и он сработал. Я не знаю, какая разница у каждого. – Anirudh

 Смежные вопросы

  • Нет связанных вопросов^_^