sql >> Database >  >> RDS >> Sqlserver

Gebruik OBJECTPROPERTY() om erachter te komen of een tabel een systeemtabel is in SQL Server

De OBJECTPROPERTY() functie in SQL Server stelt u in staat om een ​​object te controleren op een specifieke eigenschap.

U kunt deze functie gebruiken om te controleren of een object een systeemtabel is of niet. Om dit te doen, geeft u het object-ID door als het eerste argument en IsSystemTable als tweede argument. De functie retourneert een 1 of een 0 afhankelijk van of het een systeemtabel is (1 betekent dat het is een systeemtabel, en 0 betekent dat dit niet het geval is).

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Resultaat:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

In dit geval is het object is een systeemtabel.

Voorbeeld 2 – Object is GEEN systeemtabel

Dit is wat er gebeurt als het object geen systeemtabel is.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Resultaat:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

In dit geval doet de database dat wel heb in feite een object met die ID, maar het object is eigenlijk een door de gebruiker gedefinieerde tabel, dus ik krijg een negatief resultaat.

Hier is het opnieuw met OBJECT_ID() om de ID uit de naam van het object te halen.

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

Resultaat:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Ik heb ook gecontroleerd of het object een door de gebruiker gedefinieerde tabel is, en het resultaat is positief.

Voorbeeld 3 – Object bestaat niet

SQL Server gaat ervan uit dat de object-ID zich in de huidige databasecontext bevindt. Als u een object-ID uit een andere database doorgeeft, krijgt u ofwel een NULL-resultaat of krijgt u onjuiste resultaten.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];

Resultaat:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

In dit geval bevat de database geen objecten met die naam of ID, en dus krijg ik een NULL-resultaat.

Je krijgt ook NULL bij een fout of als je geen toestemming hebt om het object te bekijken.


  1. MariaDB GROUP_CONCAT()

  2. Salesforce TLS 1.0 Beëindiging

  3. Operator

  4. Case-statement in MySQL