Показать сообщение отдельно
Старый 09.08.2013, 18:41   #24  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от 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()
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...