AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.07.2025, 01:03   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А вот код хранимки
Отформатирован тут
https://sqlformat.org/

X++:
CREATE PROCEDURE [dbo].[CREATEUSERSESSIONS] @clientType int, @sessionType int, @serverid int, @versionid int, @userid nvarchar(8),
                                                                                                                      @lanExt nvarchar(10),
                                                                                                                              @manExt nvarchar(10),
                                                                                                                                      @computerName nvarchar(80),
                                                                                                                                                    @sid nvarchar(124),
                                                                                                                                                         @recid bigint, @startId int, @maxusers int, @licenseType int, @masterId int, @maxClientId int, @dataPartition nvarchar(8),
                                                                                                                                                                                                                                                                       @sessionid int OUTPUT,
                                                                                                                                                                                                                                                                                      @loginDateTime datetime OUTPUT AS DECLARE @return_val AS int DECLARE @first AS int DECLARE @max_val AS int DECLARE @counter AS int BEGIN
SELECT @sessionid = -1
SELECT @max_val = -1
SELECT @counter = 0
SELECT @loginDateTime = dateadd(ms, -datepart(ms, getutcdate()), getutcdate()) if(NOT exists
                                                                                    (SELECT *
                                                                                     FROM SYSSERVERSESSIONS WITH (NOLOCK)
                                                                                     WHERE SERVERID = @serverid
                                                                                       AND Status = 1)) BEGIN
SELECT @sessionid = -2 RETURN END
SELECT @first = min(SESSIONID)
FROM SYSCLIENTSESSIONS WITH (UPDLOCK,
                             READPAST)
WHERE STATUS = 0
  AND SESSIONID > @maxClientId
  AND SESSIONID <> @masterId IF
    (SELECT count(*)
     FROM SYSCLIENTSESSIONS
     WHERE SESSIONID IN (@first)) > 0 BEGIN IF (@licenseType = 0) BEGIN
  UPDATE SYSCLIENTSESSIONS
  SET STATUS = 1,
      VERSION = @versionid,
                SERVERID = @serverid,
                USERID = @userid,
                LOGINDATETIME = @loginDateTime,
                SID = @sid,
                USERLANGUAGE = @lanExt,
                HELPLANGUAGE = @manExt,
                CLIENTTYPE = @clientType,
                SESSIONTYPE = @sessionType,
                CLIENTCOMPUTER = @computerName,
                DATAPARTITION = @dataPartition
  WHERE SESSIONID IN (@first) END ELSE IF (@licenseType = 1) BEGIN
  UPDATE SYSCLIENTSESSIONS
  SET STATUS = 1,
      VERSION = @versionid,
                SERVERID = @serverid,
                USERID = @userid,
                LOGINDATETIME = @loginDateTime,
                SID = @sid,
                USERLANGUAGE = @lanExt,
                HELPLANGUAGE = @manExt,
                CLIENTTYPE = @clientType,
                SESSIONTYPE = @sessionType,
                CLIENTCOMPUTER = @computerName,
                DATAPARTITION = @dataPartition
  WHERE SESSIONID IN (@first)
    AND (
           (SELECT count(SESSIONID)
            FROM SYSCLIENTSESSIONS
            WHERE CLIENTTYPE = @clientType
              AND ((STATUS = 1)
                   OR (STATUS = 2))) < @maxusers) END ELSE IF (@licenseType = 2) BEGIN
  UPDATE SYSCLIENTSESSIONS
  SET STATUS = 1,
      VERSION = @versionid,
                SERVERID = @serverid,
                USERID = @userid,
                LOGINDATETIME = @loginDateTime,
                SID = @sid,
                USERLANGUAGE = @lanExt,
                HELPLANGUAGE = @manExt,
                CLIENTTYPE = @clientType,
                SESSIONTYPE = @sessionType,
                CLIENTCOMPUTER = @computerName,
                DATAPARTITION = @dataPartition
  WHERE SESSIONID IN (@first)
    AND (
           (SELECT count(SESSIONID)
            FROM SYSCLIENTSESSIONS
            WHERE CLIENTTYPE = @clientType
              AND (USERID = @userid)
              AND ((STATUS = 1)
                   OR (STATUS = 2))) > 0
         OR
           (SELECT count(DISTINCT USERID)
            FROM SYSCLIENTSESSIONS
            WHERE CLIENTTYPE = @clientType
              AND ((STATUS = 1)
                   OR (STATUS = 2))) < @maxusers) END IF @@ROWCOUNT = 0
  SELECT @sessionid = 0 ELSE
  SELECT @sessionid = @first END ELSE BEGIN IF (@licenseType = 1) BEGIN IF
    (SELECT count(SESSIONID)
     FROM SYSCLIENTSESSIONS
     WHERE CLIENTTYPE = @clientType
       AND ((STATUS = 1)
            OR (STATUS = 2))) >= @maxusers
  SELECT @sessionid = 0 END ELSE IF (@licenseType = 2) BEGIN IF ((
                                                                    (SELECT count(DISTINCT USERID)
                                                                     FROM SYSCLIENTSESSIONS
                                                                     WHERE CLIENTTYPE = @clientType
                                                                       AND ((STATUS = 1)
                                                                            OR (STATUS = 2))) >= @maxusers)
                                                                 AND (
                                                                        (SELECT count(SESSIONID)
                                                                         FROM SYSCLIENTSESSIONS
                                                                         WHERE CLIENTTYPE = @clientType
                                                                           AND (USERID = @userid)
                                                                           AND ((STATUS = 1)
                                                                                OR (STATUS = 2))) = 0))
  SELECT @sessionid = 0 END IF (@sessionid = -1)
  OR (@licenseType = 0) BEGIN WHILE (@sessionid = -1
                                     AND @counter < 5) BEGIN
  SET @counter = @counter + 1 IF
    (SELECT count(SESSIONID)
     FROM SYSCLIENTSESSIONS WITH (UPDLOCK)
     WHERE STATUS = 0
       OR STATUS = 1
       OR STATUS = 2
       OR STATUS = 3) = 0
  SELECT @max_val = @startId ELSE
  SELECT @max_val = max(SESSIONID)+1
  FROM SYSCLIENTSESSIONS WITH (UPDLOCK) IF (@max_val > 65535)
  SELECT @sessionid = -3 ELSE BEGIN
  INSERT INTO SYSCLIENTSESSIONS(SESSIONID, SERVERID, VERSION, LOGINDATETIME, USERID, SID, USERLANGUAGE, HELPLANGUAGE, CLIENTTYPE, SESSIONTYPE, RECID, CLIENTCOMPUTER, STATUS, DATAPARTITION)
  VALUES(@max_val,
         @serverid,
         @versionid,
         @loginDateTime,
         @userid,
         @sid,
         @lanExt,
         @manExt,
         @clientType,
         @sessionType,
         @recid,
         @computerName,
         1,
         @dataPartition) IF @@ROWCOUNT = 0 BEGIN
  SELECT @sessionid = -1 END ELSE
  SELECT @sessionid = @max_val END END END END END
За это сообщение автора поблагодарили: Lankey (1).
Старый 16.07.2025, 14:02   #2  
Lankey is offline
Lankey
Участник
 
159 / 30 (2) +++
Регистрация: 19.05.2020
Цитата:
Сообщение от Logger Посмотреть сообщение
А вот код хранимки
Спасибо большое. Сравню с нашей

PS Кастомизаций нет у нас, что писали бы напрямую в эту таблицу (вы спрашивали об этом ранее)
Теги
ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
select crossCompany и Views - работает только для админов? DTD DAX: Программирование 11 26.03.2014 09:08
Всегда ли правильно работает queryrun().query().dataSourceCount() при присоединении пользователем таблиц в настройках стандартного запроса? Aquarius DAX: Программирование 5 26.09.2013 09:52
AX 2012 Enterprise Portal: Не работает Add indicators в Business Overview Web Part Maxim Gorbunov DAX: Администрирование 1 07.07.2012 14:49
Не работает поиск в лукапе на ГТД Bega DAX: Функционал 0 08.12.2011 09:09
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:30.