sql >> Databáze >  >> RDS >> Sqlserver

Pomocí OBJECTPROPERTY() zjistěte, zda tabulka má výchozí omezení na serveru SQL Server

Můžete použít OBJECTPROPERTY() funkce v SQL Server, abyste zjistili, zda tabulka má nebo nemá omezení DEFAULT.

Chcete-li to provést, předejte ID objektu tabulky jako první argument a TableHasDefaultCnst jako druhý argument. Funkce vrací 1 nebo 0 v závislosti na tom, zda má nebo nemá omezení DEFAULT.

Vrácená hodnota 1 znamená, že tabulka má omezení DEFAULT a hodnotu 0 znamená, že není.

Příklad 1 – Základní použití

Zde je rychlý příklad k demonstraci.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Výsledek:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 1                     |
+-----------------------+

V tomto případě WideWorldImportersDW databáze má tabulku s poskytnutým ID a má omezení DEFAULT.

Příklad 2 – Získání ID objektu

Pokud znáte název tabulky, ale neznáte její ID, můžete použít OBJECT_ID() funkce pro načtení ID na základě jeho názvu.

Příklad:

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Výsledek:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 1                     |
+-----------------------+

Jedná se o stejný objekt z předchozího příkladu.

Zde je to opět s výstupem ID samostatně.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Výsledek:

+-------------+-----------------------+
| Object ID   | TableHasDefaultCnst   |
|-------------+-----------------------|
| 1013578649  | 1                     |
+-------------+-----------------------+

Příklad 3 – Když tabulka NEMÁ VÝCHOZÍ omezení

Zde je to, co se stane, když tabulka nemá výchozí omezení.

SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Výsledek:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 0                     |
+-----------------------+

V tomto případě je objektem tabulka, jen nemá omezení DEFAULT.

Příklad 4 – Když objekt není tabulka

Co se stane, když databáze obsahuje objekt s ID, ale tento objekt není tabulka.

SELECT OBJECTPROPERTY(
    OBJECT_ID('Sequences.ReseedAllSequences'), 
    'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Výsledek:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| NULL                  |
+-----------------------+

Příklad 5 – Objekt neexistuje

SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud zadáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') 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.


  1. Jak najít optimální jedinečný identifikátor v tabulce na serveru SQL Server:sp_special_columns

  2. oracle 12c - výběr řetězce po posledním výskytu znaku

  3. SQL Server Výstupní klauzule do skalární proměnné

  4. Připojení k Teradata v IRI Workbench