Wenn PK oder UK erstellt wird, erstellt SQL Server automatisch einen eindeutigen Index für diese Einschränkungen. Das create_date dieser Einschränkungen wird das gleiche sein wie das Erstellungsdatum der entsprechenden Indizes.
Da die sys.indexes-Ansicht keine Spalte create_date hat, ist sie absolut nutzlos für die Suche nach dieser Art von Informationen. Darüber hinaus wird die object_id-Spalte in dieser Ansicht niemals auf die entsprechende Einschränkung verweisen. Es wird auf die Tabelle zeigen, zu der der Index gehört. Der folgende Test wird diesen Punkt verdeutlichen:
CREATE TABLE dbo.TEST_T1
(
COLUMN_1 INT NOT NULL,
COLUMN_2 INT NOT NULL,
CONSTRAINT PK_TEST_T1 PRIMARY KEY (COLUMN_1)
)
GO
WAITFOR DELAY '00:00:01';
ALTER TABLE dbo.TEST_T1
ADD CONSTRAINT UK_TEST_T1 UNIQUE (COLUMN_2)
GO
SELECT O.name, O.object_id, O.create_date, I.object_id, I.name AS index_name
FROM sys.objects AS O
LEFT OUTER JOIN sys.indexes AS I ON O.object_id = i.object_id
WHERE O.name IN ('TEST_T1', 'PK_TEST_T1', 'UK_TEST_T1')
Das Ergebnis ist:
name object_id create_date object_id index_name
PK_TEST_T1 272720024 2015-03-17 11:02:47.197 NULL NULL
TEST_T1 256719967 2015-03-17 11:02:47.190 256719967 PK_TEST_T1
TEST_T1 256719967 2015-03-17 11:02:47.190 256719967 UK_TEST_T1
UK_TEST_T1 288720081 2015-03-17 11:02:48.207 NULL NULL
Also, wenn Sie das Erstellungsdatum für PK oder UK-Indizes sehen möchten, ist es nicht notwendig, sich mit sys.indexes zu verbinden. Sie sollten von sys.objects auswählen:
SELECT name, object_id, create_date
FROM sys.objects
WHERE name IN ('PK_TEST_T1', 'UK_TEST_T1')
AND type IN ('PK', 'UQ')
Das Ergebnis ist:
name object_id create_date
PK_TEST_T1 272720024 2015-03-17 11:02:47.197
UK_TEST_T1 288720081 2015-03-17 11:02:48.207