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

Откуда: г. Калуга
Сообщений: 1213
Есть некий параметр(пока один, но может быть несколько), который определяется на клиенте при старте приложения.
Этот параметр существует в течении сессии, и добавляется к некоторым записям в таблицах при их обновлении. Ообновление происходит через ХП.
Очень не хочется добавлять этот параметр к списку параметров ХП.
Была такая мысль
1. Создать временную таблицу на клиента
2. Запихать в неё необходимые параметры
3. Юзать её из ХП.

Смущает в этой схеме невозможность вызвать ХП не из клиентского приложения.

Вопрос - как грамотно обставить эту схему, xn, железобетонно работала!
30 сен 11, 10:37    [11360017]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
minva,

временная таблица создается на сеанс, как только процедура отработает и соединение закроется, таблица удалится...а держать отрытым соединение на весь сеанс работы клиента довольно затратно по ресурсам.
Имхо, как раз с параметром в хп и есть самая надежная схема...
30 сен 11, 10:42    [11360062]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
SomewhereSomehow,

Во-первых, зачем его закрывать, если пользователь постоянно с базой работает???? И потом количество пользователей, которые висят на базе максимум 5. Это небольшое настольное приложение
Во-вторых, даже если закрывать, то при каждом коннекте можно снова создавать эту таблицу...
30 сен 11, 10:47    [11360109]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
minva,

в ХП проверять существование временной таблицы, и если её нет, брать параметры там же, где и сейчас.

А лучше передавать табличную переменную в параметре. Дефолтное значение - NULL.
Внутри проверять табличный параметр на NULL и ...
Ну, в общем, как выше изложено.
30 сен 11, 10:48    [11360112]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
minva
Есть некий параметр(пока один, но может быть несколько), который определяется на клиенте при старте приложения.
Этот параметр существует в течении сессии, и добавляется к некоторым записям в таблицах при их обновлении. Ообновление происходит через ХП.
Очень не хочется добавлять этот параметр к списку параметров ХП.
Была такая мысль
1. Создать временную таблицу на клиента
2. Запихать в неё необходимые параметры
3. Юзать её из ХП.

Смущает в этой схеме невозможность вызвать ХП не из клиентского приложения.

Вопрос - как грамотно обставить эту схему, xn, железобетонно работала!
Либо использовать постоянную таблицу для хранения этого параметра для каждого коннекта, либо записывать параметр в CONTEXT_INFO
30 сен 11, 10:49    [11360122]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Glory
Member

Откуда:
Сообщений: 104751
SET CONTEXT_INFO
Associates up to 128 bytes of binary information with the current session or connection.
30 сен 11, 10:49    [11360126]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
minva
Во-первых, зачем его закрывать, если пользователь постоянно с базой работает???? И потом количество пользователей, которые висят на базе максимум 5.
Не получится, из чужого коннекта эта таблица вина не будет

А если создавать в рабочем коннекте, то зачем такие сложности? Используйте CONTEXT_INFO
30 сен 11, 10:50    [11360134]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Можно и постоянную таблицу
С номером коннекта и датой входа
30 сен 11, 10:51    [11360145]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
iap
minva,

в ХП проверять существование временной таблицы.


Как? если согласно справки её имя немного не известно полностью, там какие-то цифири добавляются. И потом даже если лайком искать, то как определить, что она из моего сеанса?

>номером коннекта

что имели ввиду?

>CONTEXT_INFO

сейчас почитаю про этого зверя
30 сен 11, 10:57    [11360196]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Glory
Member

Откуда:
Сообщений: 104751
minva
Как? если согласно справки её имя немного не известно полностью, там какие-то цифири добавляются.

А как вы добавляете тогда записи в свою временную таблицу ?
30 сен 11, 10:58    [11360214]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
minva
>номером коннекта

что имели ввиду?
SPID
30 сен 11, 11:00    [11360233]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
minva
SomewhereSomehow,

Во-первых, зачем его закрывать, если пользователь постоянно с базой работает???? И потом количество пользователей, которые висят на базе максимум 5. Это небольшое настольное приложение
Во-вторых, даже если закрывать, то при каждом коннекте можно снова создавать эту таблицу...

Закрывать...хм, да вроде как ради экономии ресурсов, хотя если у вас пользователей не много, вам может и не страшно держать соединение постоянно открытым. А насчет создавать заново - в чем смысл тогда? Каждый раз все-равно придется передавать этот параметр с клиента... короче, я бы всерно сделал через параметры хп.
30 сен 11, 11:03    [11360261]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
Glory,

Добавляю её по имени. А проверить её существование что -то типа???
if exists (select 1
            from  sysobjects
           where  id = object_id('dbo.EQ_Manufacturer')
            and   type = 'U')

так тут используется полное имя, а согласно справке в sysobjects временная хранится как имя + числовой суффикс
или как-то по-другому можно?
30 сен 11, 11:03    [11360266]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Glory
Member

Откуда:
Сообщений: 104751
minva
Добавляю её по имени. А проверить её существование что -то типа???

OBJECT_ID()
30 сен 11, 11:05    [11360280]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
minva
iap
minva,

в ХП проверять существование временной таблицы.


Как? если согласно справки её имя немного не известно полностью, там какие-то цифири добавляются. И потом даже если лайком искать, то как определить, что она из моего сеанса?
Я балдею!
IF OBJECT_ID(N'tempdb..#ВременнаяТаблица','U') IS NULL
PRINT '#ВременнаяТаблица не существует!'
ELSE
PRINT 'Есть! Есть #ВременнаяТаблица!';
Но табличный параметр лучше! (Для SQL2008, разумеется)
30 сен 11, 11:06    [11360293]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
iap,

>Я балдею!

Я тоже балдею, когда мне чайники задают вопросы, в областях, где я мастер :-)

Зато чем более глупый вопрос, тем больше нового узнаешь, например "Но табличный параметр лучше! (Для SQL2008, разумеется)"

Пошел читать
30 сен 11, 11:10    [11360338]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
minva
iap
minva,

в ХП проверять существование временной таблицы.


Как? если согласно справки её имя немного не известно полностью, там какие-то цифири добавляются. И потом даже если лайком искать, то как определить, что она из моего сеанса?


Зацени:

if OBJECT_ID( 'tempdb.dbo.#_MyTempTable', 'U') is NOT NULL
begin
  print 'таблица есть'
end
else
begin
  print 'таблицы нет'
end;
30 сен 11, 11:49    [11360837]     Ответить | Цитировать Сообщить модератору
 Re: Временная таблица или как сделать по другому?  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
minva,

Или даже лучше вот так:

/* Дропаем времянку, если уже есть */
if OBJECT_ID( 'tempdb.dbo.#_MyTempTable', 'U') is NOT NULL
begin
  drop table #_MyTempTable
end;

/* Создаём времянку */
create table #_MyTempTable
(
  [Field definitions ...]
);

/* Работа ХП */
..
30 сен 11, 11:57    [11360970]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить