:: Visual Foxpro, Foxpro for DOS
вызов хранимой процедуры mssql
Vova_ukr_lg
Автор

Сообщений: 43
Дата регистрации: 10.10.2007
Добрый день.
Запускаю хранимую процедуру
idRouteListH =0
lcSql =" declare @idRouteListH int "+;
" EXEC dbo.CreateDriverList "+;
"@date = N'" + ALLTRIM(STR(YEAR(ldDate))) + PADL(ALLTRIM(STR(MONTH(ldDate))),2,'0') + PADL(ALLTRIM(STR(DAY(ldDate))),2,'0') + "'" + "," +;
"@Number = N'"+ALLTRIM(STR(lnCarList))+"', "+;
"@driver = "+ALLTRIM(STR(lnCar))+", "+;
"@iddoc = ?@idRouteListH OUTPUT"
lnExec = SQLEXEC(hSQL,lcSql)
в переменную idRouteListH возвращается значение результат.
это нормально работает в Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)
но когда этот же код запускается в Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) процедура не выполняется и возвращается ошибка
[Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "OUTPUT"
если же убрать знак вопроса в строке
"@iddoc = ?@idRouteListH OUTPUT"
, то вызов проходит без ошибок, но возврата результата не происходит, переменная idRouteListH не меняется.

В чем ошибка? Может настройки какие-то у сервера надо проставить или изменился синтаксис в 2016 MS SQL?



Исправлено 1 раз(а). Последнее : Vova_ukr_lg, 21.12.17 15:23
Ratings: 0 negative/0 positive
Re: вызов хранимой процедуры mssql
Vova_ukr_lg
Автор

Сообщений: 43
Дата регистрации: 10.10.2007
Ошибку свою увидел. Оператор OUTPUT в вызове лишний, но почему он работал в SQL Server 2012?
Когда убрал оператор заработало и на старой и на новой версии.
Ratings: 0 negative/0 positive
Re: вызов хранимой процедуры mssql
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Vova_ukr_lg
но почему он работал в SQL Server 2012?

Так случается, что какие-то ошибки синтаксиса в одних версиях игнорируются, а позже отношение к ним меняется на более строгое.
Поэтому более правильно было сказать, что OUTPUT не "работал в 2012", а не мешал работать, игнорировался.



Исправлено 1 раз(а). Последнее : akvvohinc, 21.12.17 19:06
Ratings: 0 negative/0 positive
Re: вызов хранимой процедуры mssql
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
По синтаксису EXEC/EXECUTE использование OUTPUT не является ошибкой (оно там даже обязательно для курсорных параметров вроде как, хотя хелп не совсем чётко этот момент описывает). Другое дело что тут речь про ODBC, а у него свои заморочки. В общем то для работы с ХП через ODBC нужно было применять CALL а не EXEC - у него свои "соглашения по синтаксису", и тут уже сам ODBC озаботится о конструировании правильного запроса для сервера, передачи параметров и т.п.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика