Будет ли добавление индексов в 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] Не удалось создать ограничение или индекс. См. Предыдущие ошибки.
Таким образом, если имена индексов должны быть уникальными даже для временных объектов, это означает, что процесс является одним пользователем за раз для базы данных ..
т.е. только один пользователь может запускать только один из этих процессов в любой момент времени ..
Я думаю, что ответ на этот вопрос - просто «Да», но мне интересно, есть ли какие-нибудь другие идеи .. Думаю, я мог бы добавить текст типа временной метки часть до конца имени индекса. Это делают другие люди?