Цитата:
Сообщение от
dech
Но стоит только настроить процедуру на работу с временными таблицами, как возникает ошибка такого рода:
SQL error description: [Microsoft][ODBC SQL Server Driver]Invalid cursor state
Вот текст процедуры, использующей временную таблицу:
X++:
BEGIN
SET NOCOUNT ON
(...)
SET NOCOUNT OFF
(...)
END
Также пробовал менять SET NOCOUNT, но как видите, особого результата не добился.
Может кто-нибудь подсказать, как мне использовать временные таблицы на стороне SQL Server, чтобы можно было нормально прочитать выборку в AX?
SET NOCOUNT ON надо устанавливать один раз. В начале процедуры. И больше ее не трогать. Она влияет только и исключительно на некие служебные сообщения. Некий "отчеты" об успешности или не успешности выполнения той или иной команды. Подавляет "статистику" выполнения команды. Вывод результатов прямых команд SELECT-SQL - не подавляет
Вы сами спровоцировали ошибку снова включив ее перед выполнением служебной команды DROP TABLE. Т.е. завершающая команда DROP TABLE #TempCustTable при настройке SET NOCOUNT OFF привела к формированию некоего "мусора" который и вызвал ошибку ODBC.
PS: Правилом хорошего тона считается предварительно проверить факт существования таблицы как перед ее созданием, так и перед ее удалением. Т.е. обычно пишут так
X++:
begin
SET NOCOUNT ON
if object_id('Tempdb..#TempCustTable') is not null DROP TABLE #TempCustTable
create table #TempCustTable (...)
insert ...
select ...
if object_id('Tempdb..#TempCustTable') is not null DROP TABLE #TempCustTable
end
Цитата:
Сообщение от
dech
P.S. Спешу напомнить, что мне обязательно нужно обратиться к другой базе, поэтому использую хранимые процедуры.
Для этого хранимая процедура не обязательно. Вы вполне можете добавить обращение к другой базе в прямом запросе. Т.е. "FROM [CSF_PRD].[dbo].[SFMatl]" можно написать напрямую в команде передаваемой в stmt.executeQuery()