Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Владимир Меньшиков Member Откуда: Санкт-Петербург Сообщений: 68 |
Добрый день. Есть несколько процедур create table #src (val1 int, val2 int, val3 int) insert into #src values(1,2,3),(4,5,6),(7,8,9),(0,1,2),(3,4,5),(6,7,8) go create procedure dbo.sp1 @vl int as declare @tb1 table (vl1 int, vl2 int) insert into @tb1 select val1, val3 from #src where val2 < @vl select * from @tb1 go create procedure dbo.sp2 @vl int as declare @tb2 table (v1 int, v2 int) insert into @tb2 exec dbo.sp1 @vl select * from @tb2 go declare @tb_res table (vi int, vii int) insert into @tb_res exec dbo.sp2 3 select * from @tb_res drop procedure dbo.sp1 drop procedure dbo.sp2 drop table #src go При выполнении запроса выдается сообщение об ошибке: (6 row(s) affected) при замене в последнем запросе на другую процедуру, или вызове sp2 отдельно (без insert) create table #src (val1 int, val2 int, val3 int) insert into #src values(1,2,3),(4,5,6),(7,8,9),(0,1,2),(3,4,5),(6,7,8) go create procedure dbo.sp1 @vl int as declare @tb1 table (vl1 int, vl2 int) insert into @tb1 select val1, val3 from #src where val2 < @vl select * from @tb1 go create procedure dbo.sp2 @vl int as declare @tb2 table (v1 int, v2 int) insert into @tb2 exec dbo.sp1 @vl select * from @tb2 go declare @tb_res table (vi int, vii int) insert into @tb_res exec dbo.sp1 3 select * from @tb_res exec dbo.sp2 3 drop procedure dbo.sp1 drop procedure dbo.sp2 drop table #src go все происходит без ошибок. Представлен тестовый вариант для представления картины, поэтому вопросы зачем это нужно прошу не задавать, в реальности все гораздо сложнее, но ошибка та же. Подскажите пожалуйста как можно избавиться от этой ошибки, с наименьшими потерями? Переписать процедуры не пройдет, времени не хватит. server: SQL Server 10.50.2550 |
4 сен 13, 14:03 [14794136] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
сделать @tb1 постояной таблицей |
4 сен 13, 14:47 [14794479] Ответить | Цитировать Сообщить модератору |
Владимир Меньшиков Member Откуда: Санкт-Петербург Сообщений: 68 |
А без создания постоянных таблиц никак не получится? |
5 сен 13, 08:59 [14797220] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
можно и временную таблицу сделать(#) до вызова процедуры - она будет видна во вложенных вызовах |
5 сен 13, 09:07 [14797252] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
В вызываемую процедуру добавить битовый параметр @insert_result_into_table. Если параметр равен 0, то выдавать результат в виде селекта. Если равен 1, то вставлять результат во временную таблицу с заранее предопределённым именем (при желании можно и имя временной таблицы передавать как параметр). Перед вызовом процедуры создать временную таблицу, в параметре @insert_result_into_table передать 1. Ну и, конечно, вызов процедуры оформить не как INSERT ... EXEC, а как обычный EXEC. |
5 сен 13, 09:08 [14797254] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||
5 сен 13, 09:53 [14797489] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |