Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как лучше писать ХП?  [new]
clear2121
Member

Откуда:
Сообщений: 63
Как то повелось, что я пишу одну ХП для вставки, апдейта и удаления в таблице. В ХП есть переменная @T и в теле записи
ALTER PROCEDURE [dbo].[W_MT] 
@T      smallint     = null, ...
...
IF @T = 0
BEGIN
   SELECT ...       
...
IF @T = 1
begin
   INSERT
...
IF @T = 3
begin
   DELETE
...
Плюс в том, что мало ХП.
И что то задумался, а не лучше всё это по отдельным ХП раскидать? Кто что скажет.
СПАСИБО!
12 окт 09, 10:48    [7771767]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
Glory
Member

Откуда:
Сообщений: 104760
А права как будете раздавать "для вставки, апдейта и удаления " ?
12 окт 09, 10:49    [7771773]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
clear2121
Member

Откуда:
Сообщений: 63
Пока о правах не задумывался. Запросы идут из программы и только один я могу залесть на сервер. Пользователи лишины права самостоятельно (в ручную) лазать по серверу.
Имеется ввиду быстродействие, занимаемый объем памяти, что то другое.
12 окт 09, 10:54    [7771801]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
clear2121
И что то задумался, а не лучше всё это по отдельным ХП раскидать? Кто что скажет.
СПАСИБО!
Отдельными
12 окт 09, 10:56    [7771819]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
clear2121
Member

Откуда:
Сообщений: 63
alexeyvg
Отдельными

А почему? Если не секрет.
12 окт 09, 12:08    [7772453]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
clear2121
alexeyvg
Отдельными

А почему? Если не секрет.
Плюсы:
1. права
2. скорость
3. расшаривание кода между разработчиками
4. читаемость кода, управление кодом
12 окт 09, 12:39    [7772620]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
Dmitry Sukhovilin
Member

Откуда: Таганрог
Сообщений: 361
Отдельно.
12 окт 09, 13:29    [7773033]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
somebody
Member

Откуда: Москва
Сообщений: 708
автор
Плюс в том, что мало ХП.

А в чём плюсость этого плюса?
Задача разработчика - уменьшить кол-во сущностей, что ли?

Уж лучше сделать хранимку, из к-рой вызываются несколько хранимок, каждая на свой случай. Так и права в случае чего раскидаете, и ясность кода сохранится. Пример:

ALTER PROCEDURE [dbo].[W_MT] 
@T      smallint     = null, ...
...
IF @T = 0
BEGIN
   EXEC SEL_PROC ...
...
IF @T = 1
begin
   EXEC INS_PROC ...
...
IF @T = 3
begin
   EXEC DEL_PROC ...
...
13 окт 09, 09:41    [7776407]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
somebody
автор
Плюс в том, что мало ХП.

А в чём плюсость этого плюса?
Задача разработчика - уменьшить кол-во сущностей, что ли?

Уж лучше сделать хранимку, из к-рой вызываются несколько хранимок, каждая на свой случай. Так и права в случае чего раскидаете, и ясность кода сохранится. Пример:

ALTER PROCEDURE [dbo].[W_MT] 
@T      smallint     = null, ...
...
IF @T = 0
BEGIN
   EXEC SEL_PROC ...
...
IF @T = 1
begin
   EXEC INS_PROC ...
...
IF @T = 3
begin
   EXEC DEL_PROC ...
...
А почему нельзя сразу нужную процедуру вызвать? Без [dbo].[W_MT]?
13 окт 09, 09:50    [7776447]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
Влом регистрироваться
Guest
somebody
Так и права в случае чего раскидаете, и ясность кода сохранится.

Ни того, ни того не произойдет.

Права - все ранво придется давать на каждую процедуру + вашей мегапроцедуре надо будет так хитро дать права, чтобы она правильно наследовала права вызываемых процедур

Ясность - пропадает напрочь, все вызовы одинаковые, а делается разное.
13 окт 09, 10:06    [7776539]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
dvim
Member

Откуда: Санкт Петербург
Сообщений: 679
У нас таких ХП немало (исторически).

Их "+ "
-меньше ХП, ибо их и так немало...
-Проще поддерживать разбираться.

Их "-"
Зачастую медленне, для крупных кусков - существенно.
ReportServer с такими хп откровенно глючит.
Требует много напильника :)
И студия тоже (хотя в ней визуальные биндинги не юзаем, так что не мешает)

Права - параллельно,ибо большая их часть задается на клиенте.
На сервере право на эту процедуру обычно все равно общее.

Итог
Используем такие ХП для "мелких" запросов, не используем для отчетных и крупных (и ресурсоемких)
13 окт 09, 12:31    [7777967]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
somebody
Member

Откуда: Москва
Сообщений: 708
влом
Права - все ранво придется давать на каждую процедуру + вашей мегапроцедуре надо будет так хитро дать права, чтобы она правильно наследовала права вызываемых процедур

Речь не о правах на процедуры, а о правах для
glory
вставки, апдейта и удаления


влом
Ясность - пропадает напрочь, все вызовы одинаковые, а делается разное.

По-вашему, EXEC SEL_PROC, EXEC INS_PROC, EXEC DEL_PROC - одинаковые вызовы? ))
Почитайте про модульное программирование.
16 окт 09, 11:44    [7795703]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
Влом регистрироваться
Guest
somebody,

а в коде клиента у вас что будет написано?

EXEC [dbo].[W_MT] 0 -- для выборки
EXEC [dbo].[W_MT] 1 -- для вставки
EXEC [dbo].[W_MT] 2 -- для удаления

Очень модульно :)
16 окт 09, 12:01    [7795866]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
somebody
Member

Откуда: Москва
Сообщений: 708
влом
а в коде клиента у вас что будет написано?
EXEC [dbo].[W_MT] 0 -- для выборки
EXEC [dbo].[W_MT] 1 -- для вставки
EXEC [dbo].[W_MT] 2 -- для удаления
Очень модульно :)

Это именно модульно. ;-)

А для наглядности сделаем, к примеру, так:
ALTER PROCEDURE [dbo].[W_MT] 
@T      varchar(3)     = '', ...
...
IF @T = 'SEL'
...
IF @T = 'INS'
...
IF @T = 'DEL'
...
--вызов
EXEC W_MT 'SEL'
EXEC W_MT 'INS'
EXEC W_MT 'DEL'
16 окт 09, 19:29    [7799124]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
у вас параметры на добавление, изменение, удаление и просмотр будут разными
зачем все в кучу валить?
16 окт 09, 20:25    [7799239]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше писать ХП?  [new]
LexMinsk
Member

Откуда: Republic of Belarus
Сообщений: 451
У меня БД пока около 300 ХП, все действия сделаны отдельно. В принципе не напрягает. Я считаю, что чем проще делать тем лучше. Потом проще рзбираться, а то уже через месяц забываешь как ты там чего написал :). Знаешь просто ,что работает и все.
16 окт 09, 20:34    [7799252]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить