OBJECTPROPERTY (Transact-SQL)

Aktualisiert: 12. Dezember 2006

Gibt Informationen zu Objekten mit Schemabereich in der aktuellen Datenbank zurück. Eine Liste der Objekte mit Schemabereich finden Sie unter sys.objects (Transact-SQL). Diese Funktion kann nicht für Objekte ohne Schemabereich verwendet werden, wie z. B. DDL-Trigger (DDL, Data Definition Language) und Ereignisbenachrichtigungen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

OBJECTPROPERTY ( id , property ) 

Argumente

  • id
    Ein Ausdruck, der die ID des Objekts in der aktuellen Datenbank darstellt. id ist vom Datentyp int. Es wird davon ausgegangen, dass es sich hierbei um ein Objekt mit Schemabereich im aktuellen Datenbankkontext handelt.
  • property
    Ein Ausdruck, der die Informationen darstellt, die für das Objekt zurückgeben werden, das mit id angegeben wird. property kann einen der folgenden Werte haben.

    ms176105.note(de-de,SQL.90).gifHinweis:
    Sofern nichts anderes angegeben ist, wird NULL zurückgegeben, wenn property kein gültiger Eigenschaftsname ist, id keine gültige Objekt-ID ist, id ein nicht unterstützter Objekttyp für den angegebenen Wert von property ist oder der Aufrufer nicht über die Berechtigung zum Anzeigen der Metadaten des Objekts verfügt.

    Eigenschaftsname

Rückgabetypen

int

Ausnahmen

Gibt NULL bei einem Fehler zurück oder wenn ein Aufrufer nicht über Berechtigungen zum Anzeigen des Objekts verfügt.

In SQL Server 2005 kann ein Benutzer nur die Metadaten sicherungsfähiger Elemente anzeigen, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde. Dies bedeutet, dass Metadaten ausgebende integrierte Funktionen, z. B. OBJECTPROPERTY, möglicherweise NULL zurückgeben, wenn dem Benutzer für das Objekt keine Berechtigung erteilt wurde. Weitere Informationen finden Sie unter Konfigurieren der Sichtbarkeit von Metadaten und unter Behandlung von Problemen bei der Sichtbarkeit von Metadaten.

Hinweise

Datenbankmodul setzt voraus, dass sich object_id im aktuellen Datenbankkontext befindet. Eine Abfrage, die auf einen Wert von object_id in einer anderen Datenbank verweist, gibt NULL oder falsche Ergebnisse zurück. In der folgenden Abfrage ist beispielsweise die master-Datenbank der aktuelle Datenbankkontext. Datenbankmodul versucht, den Eigenschaftenwert für die angegebene object_id in dieser Datenbank zurückzugeben und nicht in der Datenbank, die in der Abfrage angegeben ist. Die Abfrage gibt falsche Ergebnisse zurück, da sich die Sicht vEmployee nicht in der master-Datenbank befindet.

USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO

OBJECTPROPERTY(view_id, 'IsIndexable') hat möglicherweise einen hohen Verbrauch an Computerressourcen, da die Auswertung der IsIndexable-Eigenschaft das Analysieren der Sichtdefinition, die Normalisierung und die partielle Optimierung erfordert. Obwohl die IsIndexable-Eigenschaft Tabellen oder Sichten angibt, für die ein Index erstellt werden kann, kann die tatsächliche Erstellung des Indexes fehlschlagen, wenn bestimmte Anforderungen an den Indexschlüssel nicht erfüllt werden. Weitere Informationen finden Sie unter CREATE INDEX (Transact-SQL).

OBJECTPROPERTY(table_id, 'TableHasActiveFulltextIndex') gibt den Wert 1 (True) zurück, wenn mindestens eine Spalte einer Tabelle für die Indizierung hinzugefügt wurde. Die Volltextindizierung wird für das Auffüllen aktiviert, sobald die erste Spalte für die Indizierung hinzugefügt wird.

Beim Erstellen einer Tabelle wird die Option QUOTED IDENTIFIER immer mit ON in den Metadaten der Tabelle gespeichert, selbst wenn für die Option beim Erstellen der Tabelle OFF festgelegt war. Deshalb gibt OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') immer den Wert 1 (True) zurück.

Beispiele

A. Überprüfen, ob ein Objekt eine Tabelle ist

Im folgenden Beispiel wird getestet, ob UnitMeasure in der AdventureWorks-Datenbank eine Tabelle ist.

USE AdventureWorks;
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
   PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
   PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
   PRINT 'ERROR: UnitMeasure is not a valid object.';
GO

B. Überprüfen, ob eine skalarwertige benutzerdefinierte Funktion deterministisch ist

Im folgenden Beispiel wird getestet, ob die benutzerdefinierte skalarwertige Funktion ufnGetProductDealerPrice, die einen Wert vom Typ money zurückgibt, deterministisch ist.

USE AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO

Das Resultset zeigt, dass ufnGetProductDealerPrice keine deterministische Funktion ist.

-----
0

C. Suchen der Objekte, die zu einem bestimmten Schema gehören

Im folgenden Beispiel wird die SchemaId-Eigenschaft verwendet, um alle Objekte zurückzugeben, die dem Schema Production angehören.

USE AdventureWorks;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO

Siehe auch

Verweis

COLUMNPROPERTY (Transact-SQL)
Metadatenfunktionen (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)

Andere Ressourcen

Trennung von Benutzer und Schema

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Neuer Inhalt:
  • Die in Service Pack 2 verfügbare TableHasVarDecimalStorageFormat-Eigenschaft wurde hinzugefügt.

17. Juli 2006

Neuer Inhalt:
  • Der Abschnitt mit den Ausnahmen wurde hinzugefügt.

05. Dezember 2005

Geänderter Inhalt:
  • Die Definition der Eigenschaften IsTableFunction und IsScalarFunction wurde korrigiert.
  • Beispiel C wurde geändert.