Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Мне необходимо заполнить прайс-листы, находящиеся в одной таблице, данными из остатков по товарам, которые формируются в уже имеющейся SP (для SergSuper - её я доработал с Вашей помощью ). Можно ли в SP, которая займется заполнением прайса, поставить вызов SP, формирующей данные по остаткам??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 11:03 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Отвечаю сам себе Не стал ломать голову. Просто создаю таблу в 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 Примитивно, но работает... Хотя остается поле для предложений, т. к. вопрос этим не закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:30 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Здесь на форуме говорят, что # таблица видна во вложенной процедуре. Если эта так то все очень просто. EXEC Proc, а там уж модифицируйте # как хочется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:35 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Фэнкс, Slava. И как это я сам не догадался??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:37 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik Напишите получилось или нет использовать # во вложенной SP? Дело в том, что я только что про ее видимость прочитал. Мне самому совет дали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:47 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Увы. "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. Обидно, но факт, что решение есть. Но моего опыта для его быстрого поиска не хватает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 13:05 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Вы извините но я так и думал, поэтому поиск не остановил Точно можно вот так вот insert into #Tmp exec MyProc 'Table1' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 13:31 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Остальное Вы наверно поняли, но на всякий случай CREATE PROCEDURE MyProc @TableName char(6) AS DECLARE @Str char(100) SET @Str = 'select * from ' + @TableName EXEC(@Str) GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 13:35 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
OK, Slava. Все работает Таким образом, Вы ответили на мой вопрос, за что большое Вам спасибо! Не теряйте эту конференцию из виду - мне она кажется лучшей из русскоязычных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:03 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
You welcome. Надеюсь не потеряю из виду. Хочу взять с Вас "оплату"(шутка). Расскажите как Вы эту рожицу вставили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:06 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Вообше-то вставляются комбинации типа многоточие и скобка - или точка с запятой и скобка - и т.д (см. теорию "смайликов"). Остальное доделывает сервер. Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:13 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
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), если это осознано не необходимо и других путей нет. К сожалению как-то аргументировать мою позицию я не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:25 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Попробуй другие комбинации знаков типа : ; 8 и скобок ( ). Там их много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:29 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 SergSuper >. К сожалению как-то аргументировать мою позицию я не могу. План выполнения процедур сохраняется, поэтому компилияция один раз, в случае Exec(@str)компиляция каждый раз заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:30 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 SergSuper С самого начала в нашем головном офисе был SQL6.5. Мне была поставлена задача перевода всего на SQL7, что я и выполнил с соответствующей переделкой всех View, SP и т.д. ( в течение 1 месяца). Будь моя воля, SQL7 сейчас был бы так же кандидатом на моральный апгрейд Но, увы, я пока не вхожу в число лиц, принимающих подобные решения. Вопрос по теме: как из процедуры остатков сделать функцию (пункт а)??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:42 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 SergSuper я догадывался о нерациональности EXEC(@Str), но это были только предположения. На мой взгляд эта конструкция плоха тем, что каждый раз при ее выполнениии сервер компилирует @Str заново. Точно, то что время затрачиваемое на компиляцию одной строчки сильно ничтожно мало, но если умножить на количество строк, то может и получится что-то существенное. Как Вы думаете я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:44 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
А разве GO не чистит переменные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:51 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 Genady Я у Вас мысль не крал прошу заметить, просто пока я набирал Вы уже... Delphi за 1 сек компилирует около 1600 строк, Visual C и того больше, SQL 2000 скорее всего еще больше. Вы со мной согалсны? Хочется иметь в голове количественные характеристики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:57 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 Slava GO чистит переменные, но временные таблицы живут до окончания конекшена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 14:58 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 Slava >Я у Вас мысль не крал прошу заметить, просто пока я набирал Вы уже Да ради Бога Компилирует то сервер быстро, но все равно в БД оптимизация занимаеи не последнее место, одно дело когда 10 юзеров, и совсем другое, когда 1000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 15:03 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 Genady Я с Вами абсолютно согласен. Вот вопрос: Как Вы считаете время затрачиваемое на create procedure #p значительно меньше чем компиляция одной строчки. Я только сейчас об этом задумался. Ведь эта procedure существует в TempDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 15:10 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
Я вот поразмыслел и пришел к выводу что создание временной процедуры занимает гораздо больше времени чем компиляция одной строчки, т.к. это не виртуальная процедура, а самая что ни есть вещественная. Она в TempDB пишется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 15:34 |
|
||
|
Вызов SP из другой SP.
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik Я как всегда перепутал, Вам как раз нужен п. б) 2 Anothers(about EXEC) Я имел ввиду не скорость выполнения, а само написание. Некрасиво как-то получается, от реляционности уводит Я лично использую EXEC когда надо сосчитать строку: например, есть строка "2+2", а надо получить "4". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 15:40 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32006304&tid=1826644]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
658ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 1028ms |

| 0 / 0 |
