Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Идиотская ошибка, MS SQL Server 2000 
:(
    Опции темы
Vit
Дата 19.2.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Пусть есть 2 хранимки:

Код
Create procedure test
As
begin
create table #t(i int)

insert into #t
Exec ('Select 2')

Select * from #t

end



Код
create procedure test2
As
begin
create table #t2(i int)

insert into #t2
Exec test

Select * from #t2

end



При попытке выполнить 

Код
Exec test2


Вылетает ошибка:
Цитата
Server: Msg 8164, Level 16, State 1, Procedure test, Line 6
An INSERT EXEC statement cannot be nested.


Суть в общем-то следующая: одна процедура (в данном случае test) берёт данные путём выполнения динамического запроса и немного преобразовывает эти данные, другими словами она использует конструкцию:

Insert into...
Exec (чего-то там)

Лично я не знаю другого способа записать в таблицу результат динамического запроса чтобы его обработать. Сама эта процедура выдаёт результат в ввиде таблицы

Вторая процедура должна принять эти данные и обработать, что опять-таки требует применения
Insert into...
Exec test

Что напрочь отвергается компиллятором. 


Есть какой-нибудь способ обойти эту проблему не дуплицируя код одной хранимки в сотнях других и не используя глобальные таблицы?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Stampede
Дата 19.2.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: нет
Всего: 144



У меня получилось добиться желаемого эффекта путем помещения INSERT внутрь динамического SQL.

Код

Create procedure test
As
begin
create table #t(i int)

Exec ('insert into #t Select 2')
Select * from #t
end


Рецепт почерпнут из статьи, где товарищ обсуждает способы передачи табличных данных, в том числе посредством INSERT EXEC во временную таблицу. Как главный недостаток этого метода отмечает запрет на вложенные вызовы, и предлагает возможные обходные пути: How to Share Data Between Stored Procedures



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
bonza
Дата 21.2.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 21.2.2008

Репутация: нет
Всего: нет



Может этот вариант вам подойдет?
PM MAIL   Вверх
Vit
Дата 21.2.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Это не совсем то, но в любом случае - спасибо


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.