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.
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.Hinweis: 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 |
|
17. Juli 2006 |
|
05. Dezember 2005 |
|