Привет всем!
Имею иметь следующую ситуацию:
В программе на VC подключаюсь к MS SQL2000 и
вызываю хранимую процедуру. Результат запроса
должен сохраняться в Recordset.
Если внутри хранимой процедуры используется SELECT ..., то
все работает нормально,
если сначала идет INSERT ...., а затем идет SELECT ....,
то выполняется только INSERT...., и естественно Recorset валится.
Кстати если, наоборот, сначала SELECT...., затем INSERT..., то все OK.
Но дело в том, что мне нужно сделать как раз наоборот внутри одной транзакции.
Если кто-то сталкивался с подобной ситуацией, плз, подсажите в чем м.б. причина.
Thanks in advance.
Здравствуйте Serge2, Вы писали:
S>Привет всем! S>Имею иметь следующую ситуацию: S>В программе на VC подключаюсь к MS SQL2000 и S>вызываю хранимую процедуру. Результат запроса
А из Кварьки процедура выполняется? У меня много процедур и на 6.5 и на 8.0, в которых сначала INSERT, а затем SELECT, описанной тобою проблемы не наблюдалось...
Можешь процедупу запостить?
Здравствуйте 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.
Здравствуйте 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.