Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
abort
Member

Откуда:
Сообщений: 625
отлаживаю процедуру.
в теле вызываю ProcN29;4 при заходе дебага внурь, почему то вместо запуска ProcN29;4 запускает ProcN29
это что баг или я что то не так делаю. Приходится заводить отдельную (не пакетную процедуру). Но почему не работает первый вариант
15 июл 15, 12:30    [17894437]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
abort,

; - ограничитель кода. Забыли квадратные скобки.
15 июл 15, 12:31    [17894444]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Владислав Колосов
abort,

; - ограничитель кода. Забыли квадратные скобки.
Это не ограничитель кода, а необязательная часть имени процедуры.
Возможно существование нескольких процедур с одинаковым именем, но с разными номерами после ;
MS постоянно обещает выкинуть эту возможность в следующей версии, и всё никак.

Номер процедуры полезен только в одном случае: если написать DROP ИмяПроцедурыБезНомера,
то удаляться все процедуры с таким именем. Да и то польза сомнительна.

автор
number
Необязательное целое число, используемое для группирования процедур с одним именем. Все сгруппированные процедуры можно удалить, выполнив одну инструкцию DROP PROCEDURE. Например, в приложении orders можно было бы использовать процедуры с именами orderproc;1, orderproc;2 и т. д. Инструкция DROP PROCEDURE orderproc удалила бы все процедуры из этой группы. Если имя содержит идентификаторы с разделителями, номер не должен быть частью идентификатора; следует выделять при помощи подходящего разделителя только procedure_name.

На пронумерованные хранимые процедуры распространяются следующие ограничения.

•В качестве типов данных для таких процедур нельзя использовать тип xml и определяемые пользователем типы данных среды CLR.

•Для пронумерованной хранимой процедуры нельзя создать структуру плана.

Примечание
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется
15 июл 15, 15:21    [17895500]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
abort
ProcN29;4
А есть вообще в базе процедура ProcN29;4 ?
Или только ProcN29, например?
15 июл 15, 15:24    [17895516]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
abort
Member

Откуда:
Сообщений: 625
iap,

есть процедуры
ProcN29
ProcN29;1
ProcN29;2
ProcN29;3
...
ProcN29;46

еще одна проблема: как удалить ProcN29;3
пишу по разному, но без рузультата
DROP PROCEDURE [dbo].ProcN29;3
DROP PROCEDURE [dbo].[ProcN29;3]
DROP PROCEDURE [dbo].[ProcN29];3
DROP PROCEDURE [dbo].[ProcN29;]3
16 июл 15, 07:27    [17897821]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
abort
Member

Откуда:
Сообщений: 625
abort,

пардон, немного не так:

есть процедуры
ProcN29
ProcN29;2
ProcN29;3
...
ProcN29;46
16 июл 15, 07:31    [17897824]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> еще одна проблема: как удалить ProcN29;3
> пишу по разному, но без рузультата

DROP PROCEDURE
Individual procedures within a group of numbered procedures cannot be dropped; the whole procedure group is dropped.
16 июл 15, 10:51    [17898484]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
daw
> еще одна проблема: как удалить ProcN29;3
> пишу по разному, но без рузультата

DROP PROCEDURE
Individual procedures within a group of numbered procedures cannot be dropped; the whole procedure group is dropped.

отличная иллюстрация лозунга "за что боролись, на то и напоролись"
только в варианте "наворотил один, а разгребает другой" очень даже обидно.
придумал же кто-то
16 июл 15, 10:59    [17898520]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
abort
Member

Откуда:
Сообщений: 625
после пакетов Oracle такие "пакеты" в MS SQL кажутся бредом
16 июл 15, 14:16    [17899676]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
придумал же кто-то

Это придумали те, кто не любит писать переписывать через IF возврат разных наборов.
Считайте это дополнительным входным параметром процедуры.
16 июл 15, 14:24    [17899742]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
abort
после пакетов Oracle такие "пакеты" в MS SQL кажутся бредом

а что вы имеете в виду под "пакетами"?
термин 100% ваш,
Batches уж точно никаким местом к вашему паровозу из 30 неотцепляемых вагонов.
16 июл 15, 14:26    [17899749]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
Glory
o-o
придумал же кто-то

Это придумали те, кто не любит писать переписывать через IF возврат разных наборов.
Считайте это дополнительным входным параметром процедуры.

а можете еще маленько пояснить, или ткнуть, где про это написано?
я это впервые вижу и из огрызочного описания, что приведено в create proc,
совсем непонятно, зачем такое надо, кроме как чтобы "оптом дропнуть".
16 июл 15, 14:29    [17899778]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
а можете еще маленько пояснить, или ткнуть, где про это написано?
я это впервые вижу и из огрызочного описания, что приведено в create proc,

use tempdb
go
if object_id('dbo.testproc') is not null drop procedure dbo.testproc
go
create procedure dbo.testproc
as
begin
select * from sysobjects
end
go
create procedure dbo.testproc;2
as
begin
select * from syscolumns
end
go
exec dbo.testproc
exec dbo.testproc;2


Планы кстати для процедур создаются отдельные
16 июл 15, 14:31    [17899802]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
Другим применением номеров можно назвать подобие версионности
Когда в одном объекте хранятся все последовательные варианты процедуры
Тогда клиенты разных версий могут работать с одним объектом, а получать разные результаты.
Разумеется клиент должен знать, какой вресии он сам "принадлежит"
16 июл 15, 14:34    [17899830]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
Glory,

спасибо.
у меня бы не хватило фантазии собрать под одним именем разные по смыслу процедуры,
это же самообман
может, это и пригодится для обмана кого другого, вон они дажи из 2016-ого не выкинули...
а так по виду мне показалось, это такие версии что ли одного и того же с небольшими изменениями.

а при чем тут пакеты???
16 июл 15, 14:37    [17899857]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
у меня бы не хватило фантазии собрать под одним именем разные по смыслу процедуры,
это же самообман

Вы не сталкивались с проектами, где процедуру могут менять выходной набор по мере развития проекта ?
16 июл 15, 14:39    [17899866]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
Glory
Другим применением номеров можно назвать подобие версионности
Когда в одном объекте хранятся все последовательные варианты процедуры
Тогда клиенты разных версий могут работать с одним объектом, а получать разные результаты.
Разумеется клиент должен знать, какой вресии он сам "принадлежит"

вот это как раз то, что первое в голову приходит,
но что можно собрать никак не связанное -- интереснее
16 июл 15, 14:40    [17899880]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
но что можно собрать никак не связанное -- интереснее

Если в выходной результат добавился еще один столбец, то это уже не связанные данные ?
16 июл 15, 14:41    [17899895]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
Glory
o-o
но что можно собрать никак не связанное -- интереснее

Если в выходной результат добавился еще один столбец, то это уже не связанные данные ?

это как раз я и называю версионностью.
но в вашем первом примере каждая из процедур выдает совсем свое.
16 июл 15, 14:55    [17900013]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
это как раз я и называю версионностью.
но в вашем первом примере каждая из процедур выдает совсем свое.

А это не может быть развитем проекта ?
16 июл 15, 15:01    [17900051]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Glory
o-o
это как раз я и называю версионностью.
но в вашем первом примере каждая из процедур выдает совсем свое.

А это не может быть развитем проекта ?
Но ведь точно так же можно эти номера версий просто включать в виде суффикса в имя процедуры?
Разве так не удобнее?
16 июл 15, 15:05    [17900091]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Но ведь точно так же можно эти номера версий просто включать в виде суффикса в имя процедуры?
Разве так не удобнее?

Тогда эта будут 2 разных объекта, а не один
16 июл 15, 15:17    [17900190]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Glory
iap
Но ведь точно так же можно эти номера версий просто включать в виде суффикса в имя процедуры?
Разве так не удобнее?

Тогда эта будут 2 разных объекта, а не один
Не велика потеря!
16 июл 15, 15:20    [17900215]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Glory
пропущено...

Тогда эта будут 2 разных объекта, а не один
Не велика потеря!

Два разных объекта - это в раза больше менеджмента. Права, например
16 июл 15, 15:21    [17900227]     Ответить | Цитировать Сообщить модератору
 Re: почему при вызове процедуры EXECUTE ProcN29;4 в дебаге он идет на ProcN29;  [new]
o-o
Guest
Glory
Два разных объекта - это в раза больше менеджмента. Права, например

а не надо пообъектно права раздавать.
схемами разруливается
16 июл 15, 15:28    [17900276]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить