powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вызов SP из другой SP.
25 сообщений из 48, страница 1 из 2
Вызов SP из другой SP.
    #32006253
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо заполнить прайс-листы, находящиеся в одной таблице, данными из остатков по товарам, которые формируются в уже имеющейся SP (для SergSuper - её я доработал с Вашей помощью ). Можно ли в SP, которая займется заполнением прайса, поставить вызов SP, формирующей данные по остаткам???
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006272
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю сам себе Не стал ломать голову. Просто создаю таблу в SP, формирующей сведения по остаткам, а в этой SP еe использую:
UPDATE price_records
set price_records.kol_vo =o.ostatok, price_records.price =o.price_uchet/o.ostatok
FROM price_records p, ost_t o
WHERE p.price_id = @price_s
AND p.detail_id = o.detail_id
AND p.base_id = o.base_id
AND p.vkl<>0
Примитивно, но работает... Хотя остается поле для предложений, т. к. вопрос этим не закрыт
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006273
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь на форуме говорят, что # таблица видна во вложенной процедуре. Если эта так то все очень просто.
EXEC Proc, а там уж модифицируйте # как хочется.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006274
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фэнкс, Slava. И как это я сам не догадался???
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006277
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 AlexUnik
Напишите получилось или нет использовать # во вложенной SP? Дело в том, что я только что про ее видимость прочитал. Мне самому совет дали.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006279
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы. "Invalid object name '#ost_t'" Быть может, я как-то не так создаю SP:

CREATE PROCEDURE SEL_OST_TATOK (@price_s varchar(40), @date_2 smalldatetime, @base_s smallint, @sel_s varchar(40)) AS
BEGIN
--Временная таблица для остатка, который не имел движения и поэтому д. б. просто последний остаток
create table #ostatok_dat (base_id smallint, detail_id int null, Max_dat smalldatetime)
insert into #ostatok_dat
select base_id, detail_id, MAX(date) AS Max_dat
FROM ostatok where ostatok.base_id=@base_s and ostatok.date<=@date_2
GROUP BY base_id, detail_id

--Выборка самих остатков по полученным данным
create table #ost_t (base_id smallint, date smalldatetime, detail_id int, ostatok int, price_uchet float)
insert into #ost_t
SELECT ostatok.BASE_ID, #ostatok_dat.Max_dat, ostatok.detail_id, ostatok.ostatok, ostatok.price_uchet
FROM ostatok RIGHT OUTER JOIN #ostatok_dat ON ostatok.base_id = #ostatok_dat.base_id AND ostatok.detail_id = #ostatok_dat.detail_id AND ostatok.date = #ostatok_dat.Max_dat
end

А затем идет вызов типа:
CREATE PROCEDURE upd_price_ost (@price_s varchar(40), @date_2 smalldatetime, @base_s smallint, @sel_s varchar(40)) AS

--Процедура расчета остатков на конечную дату и занесения данных в прайс

BEGIN

exec sel_ost_tatok @base_s=25, @date_2='5.25.2001', @price_s=@price_s, @sel_s =''

--Занесение самих данных
UPDATE price_records
set price_records.kol_vo =o.ostatok, price_records.price =o.price_uchet/o.ostatok
FROM price_records p, #ost_t o
WHERE p.price_id = @price_s
AND p.detail_id = o.detail_id
AND p.base_id = o.base_id
AND p.vkl<>0

end

QA выдает "Invalid object name '#ost_t'" Я вынужден с ним согласиться и использовать старый вариант

PS. Обидно, но факт, что решение есть. Но моего опыта для его быстрого поиска не хватает...
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006282
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы извините но я так и думал, поэтому поиск не остановил
Точно можно вот так вот
insert into #Tmp exec MyProc 'Table1'
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006283
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Остальное Вы наверно поняли, но на всякий случай
CREATE PROCEDURE MyProc @TableName char(6)
AS
DECLARE @Str char(100)
SET @Str = 'select * from ' + @TableName
EXEC(@Str)
GO
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006287
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OK, Slava. Все работает Таким образом, Вы ответили на мой вопрос, за что большое Вам спасибо! Не теряйте эту конференцию из виду - мне она кажется лучшей из русскоязычных.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006290
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
You welcome. Надеюсь не потеряю из виду. Хочу взять с Вас "оплату"(шутка). Расскажите как Вы эту рожицу вставили?
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006291
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообше-то вставляются комбинации типа многоточие и скобка - или точка с запятой и скобка - и т.д (см. теорию "смайликов"). Остальное доделывает сервер. Успехов!
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006294
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik

1. По-моему или у Вас стоит 6.5 или Вы где-то ошибаетесь. Например у меня на 2000-м(и на 7-м тоже должен) такой скрипт проходит без ошибок:

create proc #p as select * from #t
go
create table #t(i int)
go
exec #p

2. Не стоит использовать EXEC(@Str)там где можно без этого. Вы же можете:
а) из процедуры остатков сделать функцию
б) заполнять таблицу прямо из процедуры(insert #t exec #p)

Если у Вас 2000-й я бы советовал остановиться на п. б), иначе - п. а)

Старайтесь в дальнейшем не использовать EXEC(@Str), если это осознано не необходимо и других путей нет. К сожалению как-то аргументировать мою позицию я не могу.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006295
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
, :
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006296
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй другие комбинации знаков типа : ; 8 и скобок ( ). Там их много
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006297
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper
>. К сожалению как-то аргументировать мою позицию я не могу.

План выполнения процедур сохраняется, поэтому компилияция один раз, в случае Exec(@str)компиляция каждый раз заново.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006301
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
С самого начала в нашем головном офисе был SQL6.5. Мне была поставлена задача перевода всего на SQL7, что я и выполнил с соответствующей переделкой всех View, SP и т.д. ( в течение 1 месяца). Будь моя воля, SQL7 сейчас был бы так же кандидатом на моральный апгрейд Но, увы, я пока не вхожу в число лиц, принимающих подобные решения.

Вопрос по теме: как из процедуры остатков сделать функцию (пункт а)???
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006302
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
я догадывался о нерациональности EXEC(@Str), но это были только предположения. На мой взгляд эта конструкция плоха тем, что каждый раз при ее выполнениии сервер компилирует @Str заново. Точно, то что время затрачиваемое на компиляцию одной строчки сильно ничтожно мало, но если умножить на количество строк, то может и получится что-то существенное. Как Вы думаете я прав?
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006303
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А разве GO не чистит переменные?
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006304
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
Я у Вас мысль не крал прошу заметить, просто пока я набирал Вы уже... Delphi за 1 сек компилирует около 1600 строк, Visual C и того больше, SQL 2000 скорее всего еще больше. Вы со мной согалсны?
Хочется иметь в голове количественные характеристики.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006305
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Slava

GO чистит переменные, но временные таблицы живут до окончания конекшена
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006309
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Slava
>Я у Вас мысль не крал прошу заметить, просто пока я набирал Вы уже
Да ради Бога

Компилирует то сервер быстро, но все равно в БД оптимизация занимаеи не последнее место, одно дело когда 10 юзеров, и совсем другое, когда 1000.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006310
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
Я с Вами абсолютно согласен. Вот вопрос: Как Вы считаете время затрачиваемое на create procedure #p значительно меньше чем компиляция одной строчки. Я только сейчас об этом задумался. Ведь эта procedure существует в TempDB.
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006312
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Slava
Че то не понял вопроса
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006313
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот поразмыслел и пришел к выводу что создание временной процедуры занимает гораздо больше времени чем компиляция одной строчки, т.к. это не виртуальная процедура, а самая что ни есть вещественная. Она в TempDB пишется
...
Рейтинг: 0 / 0
Вызов SP из другой SP.
    #32006316
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik
Я как всегда перепутал, Вам как раз нужен п. б)

2 Anothers(about EXEC)
Я имел ввиду не скорость выполнения, а само написание.
Некрасиво как-то получается, от реляционности уводит
Я лично использую EXEC когда надо сосчитать строку: например, есть строка "2+2", а надо получить "4".
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вызов SP из другой SP.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]