Будет ли добавление индексов в SQL серверных временных таблиц предотвращать одновременное выполнение процессов? - PullRequest
0 голосов
/ 05 августа 2020

Будет ли добавление индексов в SQL серверные временные таблицы предотвращать одновременное выполнение процессов?

Похоже, что это так ..

т.е. процесс имеет код вроде:

CREATE TABLE #HRF605_Part1_Raw_Data 
(
    MemberNo                    INTEGER   NOT NULL,
    PersonID                    INTEGER   NOT NULL,
    Gender                      CHAR(40)  NOT NULL,
    Age                         INTEGER   NOT NULL,
    Movement_Reason             CHAR(30)  NOT NULL,
    ProductLevel                CHAR(50)  NULL,
    PolicyTreatmentType         CHAR(50)  NULL,
    StateID                     CHAR(30)  NOT NULL,
    IsOverseas                  CHAR(30)  NULL,
    HospWaitExemptionUsedDate   CHAR(30)  NULL,
    HospWaitExemptionUsedStatus CHAR(30)  NULL,
    JoinDate                    DATETIME  NULL,
    IsHosCover                  CHAR(30)  NULL,
    HealthTermSuspID            CHAR(5)   NULL,

    CONSTRAINT [XPKHRF605Part1RawData] 
        PRIMARY KEY CLUSTERED ([MemberNo] ASC, [PersonID] ASC, 
                               [Movement_Reason] ASC, [StateID] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

Если я запускаю процесс с большим диапазоном дат и без фильтров, и он занимает 3 минуты ... и я хочу запустить тот же процесс с фильтром одновременно, чтобы этот процесс занимал несколько секунд, однако я получаю сообщение :

Msg 2714, уровень 16, состояние 5, процедура ..., строка 114 [Batch Start Line 0] В базе данных уже есть объект с именем "XPKHRF605Part1RawData".

Msg 1750, уровень 16, состояние 1, процедура ..., строка 114 [Batch Start Line 0] Не удалось создать ограничение или индекс. См. Предыдущие ошибки.

Таким образом, если имена индексов должны быть уникальными даже для временных объектов, это означает, что процесс является одним пользователем за раз для базы данных ..

т.е. только один пользователь может запускать только один из этих процессов в любой момент времени ..

Я думаю, что ответ на этот вопрос - просто «Да», но мне интересно, есть ли какие-нибудь другие идеи .. Думаю, я мог бы добавить текст типа временной метки часть до конца имени индекса. Это делают другие люди?

1 Ответ

3 голосов
/ 05 августа 2020

В запросе вы явно указываете имя ограничения, поэтому SQL Сервер возвращает ошибку. Чтобы решить эту проблему, вам нужно избегать присвоения имени вашему первичному ключу.

CREATE TABLE #HRF605_Part1_Raw_Data 
(
    MemberNo                    INTEGER   NOT NULL,
    PersonID                    INTEGER   NOT NULL,
    Gender                      CHAR(40)  NOT NULL,
    Age                         INTEGER   NOT NULL,
    Movement_Reason             CHAR(30)  NOT NULL,
    ProductLevel                CHAR(50)  NULL,
    PolicyTreatmentType         CHAR(50)  NULL,
    StateID                     CHAR(30)  NOT NULL,
    IsOverseas                  CHAR(30)  NULL,
    HospWaitExemptionUsedDate   CHAR(30)  NULL,
    HospWaitExemptionUsedStatus CHAR(30)  NULL,
    JoinDate                    DATETIME  NULL,
    IsHosCover                  CHAR(30)  NULL,
    HealthTermSuspID            CHAR(5)   NULL,

    ---CONSTRAINT [XPKHRF605Part1RawData] 
        PRIMARY KEY CLUSTERED ([MemberNo] ASC, [PersonID] ASC, 
                               [Movement_Reason] ASC, [StateID] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

Таким образом, SQL Сервер создаст уникальное имя для каждого первичного ключа для временной таблицы разделенных сеансов.

use tempdb
go

select * from sys.indexes
where object_id in (select tbl.object_id from sys.tables tbl where name like '#HRF605%' )

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...