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

Откуда:
Сообщений: 166
Всем доброе утро

Значит так:

У меня есть таблица (user_sklad) в которой я записываю spid,net_address и номер склада с которым хочет работать пользователь.

После этого пользователь пользуется View's на все таблице .View выгледит так:

SELECT KOD_SKLAD, RASPOLOGENIE
FROM dbo.RASPOLOGENIE_SKLAD
WHERE (KOD_SKLAD = get_sklad_number())


get_sklad_number() :

CREATE FUNCTION get_sklad_number()
RETURNS int

BEGIN
RETURN (SELECT TOP 1 kod_sklad
FROM dbo.user_sklad
WHERE net_address = (SELECT TOP 1 net_address
FROM master.dbo.sysprocesses
WHERE spid = @@spid)
)

END


По такому примеру построены все View в DB

По какои то причине в середине работы функция get_sklad_number() не возвращает kod_sklad и тогда все VIEW пустые.

ПОЧЕМУ !!!!!
5 фев 04, 10:14    [521838]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
Может кто нибудь все таки поможет ?
5 фев 04, 10:39    [521895]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Paul Chabinsky
Member

Откуда:
Сообщений: 322
А почему если не секрет не рассматривается вариант с хронением номера склада с которым хочет работать пользователь на клиенте...? И подавать этот номер в параметр хронимой процедуры или в запрос который сформирован должным образом формировать?
5 фев 04, 10:47    [521917]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
у microsoft'а есть такая фишка,что если долго не обращаться к переменной, она теряет свое значение, поэтому лучше избавиться от глобальных переменных...
или хотя бы хранить все на клиенте, а как только нужно значение записывать в глобальную переменную, попользоваться в разных запросах...


для спящего время бодрствования равносильно сну
5 фев 04, 10:52    [521935]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
2Paul

Очень много работы
5 фев 04, 10:53    [521939]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
2Алексей2003

Это не глобальная переменная.Значение хранится в таблице
5 фев 04, 10:56    [521945]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
а клиентская программа гарантирует что запись в
user_sklad и вызов функции происходит в одном соединении
а то ведб будут разные spid-ы
5 фев 04, 11:00    [521960]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
2LexusR

Поэтому я использую net_address

select max(net_address) from master.dbo.sysprocesses where spid=@@spid
5 фев 04, 11:05    [521975]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
выборка net_address идет с условием spid=@@spid
а если запись и выборка происходят в разных коннектах то
@@spid при записи не равет @@spid при считывании
5 фев 04, 11:08    [521982]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
2LexusR

А когда меняется конект ?
5 фев 04, 11:10    [521990]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
это вамс виднее - ваш клиент
5 фев 04, 11:12    [521993]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Good
Member

Откуда:
Сообщений: 166
Не важно какой spid ,net_address для всех spid-ов один

WHERE net_address = (SELECT TOP 1 net_address
FROM master.dbo.sysprocesses
WHERE spid = @@spid)
5 фев 04, 11:18    [522007]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
да пардон-малость прогнал

попробу изменить функцию чтобы гарантировно вытаскивало ненулевой адрес и склад типа

CREATE FUNCTION get_sklad_number()
RETURNS int
BEGIN
RETURN (SELECT max(kod_sklad)
FROM dbo.user_sklad
WHERE net_address = (SELECT max(net_address)
FROM master.dbo.sysprocesses
WHERE spid = @@spid)
)

5 фев 04, 11:31    [522036]     Ответить | Цитировать Сообщить модератору
 Re: Очень интересно  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
что хранится в таблице

@@spid???


для спящего время бодрствования равносильно сну
5 фев 04, 11:42    [522059]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить