Что за беда со Stored procedure
От: Serge2  
Дата: 20.02.02 09:48
Оценка:
Привет всем!
Имею иметь следующую ситуацию:
В программе на VC подключаюсь к MS SQL2000 и
вызываю хранимую процедуру. Результат запроса
должен сохраняться в Recordset.
Если внутри хранимой процедуры используется SELECT ..., то
все работает нормально,
если сначала идет INSERT ...., а затем идет SELECT ....,
то выполняется только INSERT...., и естественно Recorset валится.
Кстати если, наоборот, сначала SELECT...., затем INSERT..., то все OK.
Но дело в том, что мне нужно сделать как раз наоборот внутри одной транзакции.
Если кто-то сталкивался с подобной ситуацией, плз, подсажите в чем м.б. причина.
Thanks in advance.
Re: Что за беда со Stored procedure
От: Zar Россия  
Дата: 20.02.02 10:06
Оценка:
Здравствуйте Serge2, Вы писали:

S>Привет всем!

S>Имею иметь следующую ситуацию:
S>В программе на VC подключаюсь к MS SQL2000 и
S>вызываю хранимую процедуру. Результат запроса

А из Кварьки процедура выполняется? У меня много процедур и на 6.5 и на 8.0, в которых сначала INSERT, а затем SELECT, описанной тобою проблемы не наблюдалось...
Можешь процедупу запостить?
[ Zarathustra ]
Re: Что за беда со Stored procedure
От: Lexey Россия  
Дата: 20.02.02 10:16
Оценка:
Здравствуйте Serge2, Вы писали:

S>Привет всем!

S>Имею иметь следующую ситуацию:
S>В программе на VC подключаюсь к MS SQL2000 и
S>вызываю хранимую процедуру. Результат запроса
S>должен сохраняться в Recordset.
S>Если внутри хранимой процедуры используется SELECT ..., то
S>все работает нормально,
S>если сначала идет INSERT ...., а затем идет SELECT ....,
S>то выполняется только INSERT...., и естественно Recorset валится.

А ты точно уверен, что выполняется только Insert? Кстати, через что с базой работаешь?

S>Кстати если, наоборот, сначала SELECT...., затем INSERT..., то все OK.

S>Но дело в том, что мне нужно сделать как раз наоборот внутри одной транзакции.
S>Если кто-то сталкивался с подобной ситуацией, плз, подсажите в чем м.б. причина.

Наиболее вероятная причина — любой батч из SQL-предложений генерирует промежуточные результаты (типа числа обновленных записей и т.п.). В твоем случае первым результатом оказывается счетчик строк, вставленных insert'ом, а не результат select. Самый простой способ от этого избавится — вставить в начале процедуры SET NOCOUNT ON.
Re[2]: Что за беда со Stored procedure
От: Serge2  
Дата: 20.02.02 10:27
Оценка:
Здравствуйте Lexey, Вы писали:

L>Здравствуйте Serge2, Вы писали:


S>>Привет всем!

S>>Имею иметь следующую ситуацию:
S>>В программе на VC подключаюсь к MS SQL2000 и
S>>вызываю хранимую процедуру. Результат запроса
S>>должен сохраняться в Recordset.
S>>Если внутри хранимой процедуры используется SELECT ..., то
S>>все работает нормально,
S>>если сначала идет INSERT ...., а затем идет SELECT ....,
S>>то выполняется только INSERT...., и естественно Recorset валится.

L>А ты точно уверен, что выполняется только Insert? Кстати, через что с базой работаешь?


S>>Кстати если, наоборот, сначала SELECT...., затем INSERT..., то все OK.

S>>Но дело в том, что мне нужно сделать как раз наоборот внутри одной транзакции.
S>>Если кто-то сталкивался с подобной ситуацией, плз, подсажите в чем м.б. причина.

L>Наиболее вероятная причина — любой батч из SQL-предложений генерирует промежуточные результаты (типа числа обновленных записей и т.п.). В твоем случае первым результатом оказывается счетчик строк, вставленных insert'ом, а не результат select. Самый простой способ от этого избавится — вставить в начале процедуры SET NOCOUNT ON.



Огромное всем спасибо. Работаю через ADO. Действительно, дело было в промежуточных
messages. Попробовал в Query Analyzer выполнить процедуру. В результате на вкладке Messages было два сообщения : одно на результаты INSERT, другое на SELECT.
Внутри процедуры поставил SET NOCOUNT ON, в результате все OK.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.