sql >> Databasteknik >  >> RDS >> Sqlserver

Använd OBJECTPROPERTY() för att ta reda på om en tabell är en systemtabell i SQL Server

OBJECTPROPERTY() funktion i SQL Server gör att du kan kontrollera ett objekt för en specifik egenskap.

Du kan använda den här funktionen för att kontrollera om ett objekt är en systemtabell eller inte. För att göra detta, skicka objekt-ID som det första argumentet och IsSystemTable som det andra argumentet. Funktionen returnerar en 1 eller en 0 beroende på om det är en systemtabell eller inte (1 betyder att det är en systemtabell och 0 betyder att det inte är det).

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

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

Resultat:

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

I det här fallet är objektet är en systemtabell.

Exempel 2 – Objekt är INTE en systemtabell

Här är vad som händer när objektet inte är en systemtabell.

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

Resultat:

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

I det här fallet gör det databasen faktiskt har ett objekt med det ID, men objektet är faktiskt en användardefinierad tabell, så jag får ett negativt resultat.

Här använder den återigen OBJECT_ID() för att få ID från objektets namn.

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

Resultat:

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

Jag kollade också för att se om objektet är en användardefinierad tabell och resultatet är positivt.

Exempel 3 – Objekt existerar inte

SQL Server antar att objekt-ID:t finns i den aktuella databaskontexten. Om du skickar in ett objekt-ID från en annan databas får du antingen ett NULL-resultat eller så får du felaktiga resultat.

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

Resultat:

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

I det här fallet innehåller databasen inga objekt med det namnet eller ID, så jag får ett NULL-resultat.

Du får också NULL vid fel eller om du inte har behörighet att visa objektet.


  1. Kör SERVERPROPERTY() mot en länkad server i SQL Server

  2. Datum- och tidsenheter i MySQL (fullständig lista)

  3. Ansluter Microsoft Excel till Xero

  4. Jämför tillfälliga tabeller för PostgreSQL och Oracle GTT