sql >> Database >  >> RDS >> Sqlserver

Zoek uit of een object een door de gebruiker gedefinieerde tabel in SQL Server is met OBJECTPROPERTY()

U kunt de OBJECTPROPERTY() . gebruiken functie in SQL Server om te controleren of een object een door de gebruiker gedefinieerde tabel is of niet.

Om dit te doen, geeft u het object-ID door als het eerste argument en IsUserTable als tweede argument. De functie retourneert een 1 of een 0 afhankelijk van of het een door de gebruiker gedefinieerde tabel is.

Een retourwaarde van 1 betekent dat het is een door de gebruiker gedefinieerde tabel en een waarde van 0 betekent dat dat niet zo is.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];

Resultaat:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

In dit geval is de WideWorldImportersDW database heeft een object met de opgegeven ID, en het is een door de gebruiker gedefinieerde tabel.

Voorbeeld 2 – De object-ID verkrijgen

Als u de naam van het object weet, maar niet de ID, kunt u de OBJECT_ID() gebruiken functie om de ID op basis van zijn naam op te halen.

Voorbeeld:

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

Resultaat:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

Dit is hetzelfde object uit het vorige voorbeeld.

Hier is het weer met de ID-uitvoer afzonderlijk.

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

Resultaat:

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

Voorbeeld 3 – Wanneer het object GEEN door de gebruiker gedefinieerde tabel is

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

SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];

Resultaat:

+---------------+
| IsUserTable   |
|---------------|
| 0             |
+---------------+

In dit geval doet de database dat wel een object met die ID hebben, maar het object is eigenlijk een opgeslagen procedure (geen door de gebruiker gedefinieerde tabel), dus ik krijg een negatief resultaat.

Hier is het opnieuw met OBJECT_ID() .

SELECT 
  OBJECT_ID('Sequences.ReseedAllSequences') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsProcedure') AS [IsProcedure];

Resultaat:

+-------------+---------------+---------------+
| Object ID   | IsUserTable   | IsProcedure   |
|-------------+---------------+---------------|
| 402100473   | 0             | 1             |
+-------------+---------------+---------------+

Ik heb ook gecontroleerd of het object een opgeslagen procedure is, en het resultaat is positief.

Voorbeeld 4 – 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'), 'IsUserTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsUserTable') 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. In Oracle AS werkt de alias niet

  2. Externe toegang tot MySQL-database inschakelen

  3. Oracle 11g - Draaien ongedaan maken

  4. Hoe maak je een tijdelijke tabel in SQL?