Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server a zkontroluje, zda má tabulka časové razítko sloupec.
Chcete-li to provést, předejte ID objektu tabulky jako první argument a TableHasTimestamp
jako druhý argument. Funkce vrací 1
nebo 0
podle toho, zda má či nemá časové razítko sloupec.
Vrácená hodnota 1
znamená, že tabulka dělá mít časové razítko a hodnotu 0
znamená, že ne.
Toto funguje také pro sloupce, které byly definovány jako rowversion (časové razítko je zastaralé synonymum pro rowversion ).
Příklad 1 – Sloupec časového razítka
Zde je rychlý příklad k demonstraci na stole s časovým razítkem sloupec.
USE Test_timestamp; SELECT OBJECTPROPERTY(OBJECT_ID('Pet'), 'TableHasTimestamp') AS [TableHasTimestamp];
Výsledek:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
V tomto případě Test_timestamp databáze má tabulku s poskytnutým ID a má časové razítko sloupec.
Používám OBJECT_ID()
funkce pro načtení ID tabulky na základě jejího názvu.
Příklad 2 – Sloupec verze řádku
Jak již bylo zmíněno, tato metoda funguje také v případě, že jste použili rowversion k definování sloupce.
Pokud například vytvořím tabulku takto:
CREATE TABLE Owner ( OwnerId int PRIMARY KEY, OwnerName varchar(255), RowVersion rowversion );
A pak na to spusťte kontrolu:
SELECT OBJECTPROPERTY(OBJECT_ID('Owner'), 'TableHasTimestamp') AS [TableHasTimestamp];
Výsledek:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
Všiml jsem si toho, ačkoli dokumentace společnosti Microsoft uvádí, že časové razítko je synonymem pro rowversion , v době psaní tohoto článku vytváří sloupec jako rowversion na mém systému SQL Server 2017 to skutečně vypadá jako časové razítko sloupec. Pokud se podívám na typ po vytvoření sloupce, zobrazí se jako sloupec s časovým razítkem.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Column], TYPE_NAME(system_type_id) AS [Type] FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Owner';
Výsledek:
+---------+------------+-----------+ | Table | Column | Type | |---------+------------+-----------| | Owner | OwnerId | int | | Owner | OwnerName | varchar | | Owner | RowVersion | timestamp | +---------+------------+-----------+
Příklad 3 – Tabulky bez sloupce TIMESTAMP
Co se stane, když stůl nemá časové razítko sloupec.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasTimestamp') AS [TableHasTimestamp];
Výsledek:
+---------------------+ | TableHasTimestamp | |---------------------| | 0 | +---------------------+
V tomto případě je objektem tabulka, ale nemá časové razítko sloupec.
Příklad 4 – Když objekt není tabulka
Co se stane, když databáze obsahuje objekt s ID, ale tento objekt není ani tabulka.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasTimestamp') AS [TableHasTimestamp];
Výsledek:
+---------------------+ | TableHasTimestamp | |---------------------| | NULL | +---------------------+
Příklad 5 – Objekt neexistuje
SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud předáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasTimestamp') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasTimestamp') AS [12345678];
Výsledek:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
V tomto případě databáze neobsahuje žádné objekty tohoto jména nebo ID, takže dostanu výsledek NULL.
Při chybě nebo v případě, že nemáte oprávnění k zobrazení objektu, získáte také hodnotu NULL.