2 Stimmen

Information über Objekte erhalten

Ich versuche, die Tabellen- und Spalteninformationen abzurufen. Dafür habe ich zwei Abfragen wie folgt geschrieben:

SELECT * FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id)='Aduser'

SELECT * FROM Chag.sys.tables so
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref'

Diese beiden funktionieren gut, wenn ich sie in der Chag-Datenbank ausführe, aber wenn ich dies in einer anderen Datenbank ausführe, geben sie nichts zurück.

Ich möchte sie in einer anderen Datenbank ausführen, also wie mache ich das?

3voto

Andriy M Punkte 73604

Die OBJECT_NAME()-Funktion akzeptiert einen zusätzlichen Parameter der Datenbank-ID. Was die SCHEMA_NAME() betrifft, sollten Sie sie wahrscheinlich durch OBJECT_SCHEMA_NAME() ersetzen, welches äquivalent zu SCHEMA_NAME() ist, nur dass es die Objekt-ID anstelle der Schema-ID verwendet und auch die Datenbank-ID als zweiten (optionalen) Parameter akzeptiert.

Sie können DB_ID() verwenden, um die ID der angegebenen Datenbank zu erhalten.

Hier sind modifizierte Versionen Ihrer Anweisungen:

SELECT *
FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id, DB_ID('Chag'))='Aduser'

SELECT *
FROM Chag.sys.tables so
WHERE so.name = 'Aduser'
  AND OBJECT_SCHEMA_NAME(so.object_id, DB_ID('Chag')) = 'Tref'

2voto

Alexey Punkte 899

Wenn der Grund in Funktionen OBJECT_NAME, SCHEMA_NAME wie von Shark angegeben liegt, kann es hilfreich sein, Daten aus den entsprechenden Views abzurufen anstatt diese Funktionen aufzurufen:

select c.* from chag.sys.columns c
join chag.sys.objects o on 
    c.object_id = o.object_id
where o.name = 'Aduser'

select t.* from chag.sys.tables t
join chag.sys.schemas s on
    t.schema_id = s.schema_id
where t.name = 'Aduser' and s.name = 'Tref'

0voto

Weil Sie eine Database.Schema.Object-Referenz verwenden. Versuchen Sie, dies gegen andere Datenbanken auszuführen:

SELECT * FROM sys.columns c 
WHERE OBJECT_NAME(c.object_id)='Aduser' 

SELECT * FROM sys.tables so 
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref' 

Beachten Sie jedoch, dass wenn es keine 'Aduser' oder 'Tref'-Objekte gibt, erhalten Sie keine Ergebnisse.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X