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

Откуда:
Сообщений: 40
Читал много вариантов, кроме одного, который сам напрашивается.
Что мешает завести глобальную таблицу:
Create Table ID_Exchange

id int IDENTITY (1, 1) not null,
id_for_exchange int not null,
owner varchar(800) not null

И ложить id в неё.
После чего, вызывать нужную sp с указанием owner (это может быть что угодно, в зависимости от задачи. Либо имя пользователя, либо номер сессии, либо GUID)

Процедура вылавливает из этой таблицы все переданные ей id
select id from ID_Exchange where owner=@owner

и... и готово :)

А в конце работы процедуры убивать эти записи
delete from ID_Exchange where owner=@owner


Есть ли грабли у такого метода (которых я не вижу) ?
31 дек 03, 08:58    [479588]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
--------------------
Guest
Это вполне стандартный прием
Один из недостатков - если эта таблица находится в основной базе, то ее никогда нельзя будет поставить в режим Read Only
31 дек 03, 09:19    [479598]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Shirson
Member

Откуда:
Сообщений: 40
А что такое "основная база"?
(и что мешает завести таблицу в другой базе?)
31 дек 03, 09:40    [479611]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Грабли здесь такие:
возможно увеличение трафика между сервером и клиентом;
очистка может не случится вследствие какой-либо ошибки в процедуре (маловероятно, но неприятно).
31 дек 03, 09:47    [479616]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Shirson
Member

Откуда:
Сообщений: 40
>Alexes
Грабли здесь такие:
возможно увеличение трафика между сервером и клиентом;


Ну, при большинстве других способов она тоже увеличится. :)

очистка может не случится вследствие какой-либо ошибки в процедуре (маловероятно, но неприятно).

Скорее это НЕвероятно. Нормально написанная sp этого недопустит.
31 дек 03, 09:56    [479625]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Есть разница, отослать все идентификаторы за один вызов или не за один.
Да, если будет транзакция, то невероятно.

И как было уже сказано - это один из стандартных вариантов.
31 дек 03, 10:09    [479631]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
1.Клинап. Есть хороший шанс получить "чужие" ид, то есть ид такого же овнера, который не почистил за собой - а это запросто, тайм-аут, килл, рестарт сервера и т.д.
2.Блокировки, а значит ЦПУ, ресурсы, ...
3.Контроллер дисков. Если "попугайный" тест покажет менее 4000 (а он покажет менее 2000 у 75% населения), то замедление в работе будет ОЧЕНЬ существенным

Сделать бы сессионные табличные переменные...

У меня более - менее работает вариант с коллекциями во внешних хранимках, но он жручий по памяти, чтобы не плодить критических секций. Вариант не жручий по памяти сильно тормозит многопользовательскую работу :(
31 дек 03, 12:01    [479748]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Sinner
Member

Откуда:
Сообщений: 453
можно наверное и строкой передавать...
а в хранимкее ее распарсить...
3 янв 04, 13:23    [480362]     Ответить | Цитировать Сообщить модератору
 Re: Передача списка id в процедуру.  [new]
Sha
Member

Откуда: Нижний Новгород
Сообщений: 104
С 2001 года используем похожий способ только не для параметров SP, а для генерации на клиентах "отчетов", т.е. самых разнообразных HTML документов. Приложение в зависимости от типа документа помещает в постоянную таблицу набор именованных параметров сопровождая их идентификаторами HOST_NAME() и USER и запускает другую прогу, типа простенького браузера с указанием URL документа и все.
Каждый документ знает какие именно параметры ему необходимы для "самозаполнения" (JS + ADO), запрашивает их (по именам, HOST_NAME и USER) и начинает заполняться, иногда долго, так, что юзер успеет запросить аналогичным образом несколько других. Перезапись набора параметров в таблице предваряется ессно удалением предыдущего набора.
Грабли такие: клиент должен быть Single Instance, а если одновременно работают с одной базой несколько разных приложений-клиентов, надо еще и APP_NAME использовать.
А параметры, кстати, имеют флаг, определяющий их "время жизни". Например подпись лица выписавшего счет (юзера), расшифровка подписи начальника,
дата (часто вперед, т.к. док-ты готовятся заранее) - для конкретного юзера - редко или вообще неизменные параметры. Они не удаляются каждый раз, и пока не приспичит, юзер их не меняет.
В общем идея на мой взгляд хорошая и излечила многим геморой.
3 янв 04, 15:12    [480416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить