So wählen Sie den Spaltennamen aus mehreren Tabellen in SQL Server 2000-2008, dass in einer Reihe von Namen
Wenn ich einen Satz von Namen wie diese:
('first', 'fname', 'firstname', 'namef', 'namefirst', 'name')
Was ist die beste Methode in der SQL Server 2000 - 2008 zum abrufen der eindeutigen Tabellennamen enthalten Spaltennamen in der obigen Reihe für eine bestimmte Datenbank?
Und das wollte ich ausschließen-system Tisch-und temp-Tabellen aus der Liste der Tabellen angezeigt werden.
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc
ON so.id = sc.id
WHERE sc.name IN ('first', 'fname', 'firstname', 'namef', 'namefirst', 'name')
Dies ist ein Derivat von diesem Frage glaube ich.
Thx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für SQL Server 2005 und höher
FWIW, die für neuere Versionen von SQL Server bevorzuge ich die Katalogsichten über
INFORMATION_SCHEMA
für die aufgeführten Gründe in diesem blog-post:Der Fall gegen
INFORMATION_SCHEMA
AnsichtenSiehe auch Warnungen wie diese auf das Thema TABELLEN (Transact-SQL) auf der MSDN-Website:
Also die Abfrage, die ich verwenden würde, wäre wie folgt (Filter-out-system die Objekte und auch die Vermeidung von #temp-Tabellen in der Veranstaltung Sie in tempdb):
Wiederholen Sie diesen Schritt für alle Datenbanken:
(Die
COLLATE
Klauseln gibt es, um Fehler zu vermeiden in dem Fall, wo Sie Datenbanken mit unterschiedlichen Sortierungen.)Für SQL Server 2000
Beachten Sie, dass das oben genannte nicht-Hilfe für SQL Server 2000, aber ich glaube nicht, sollten Sie machen es zu einem Ziel werden in der Lage zum ausführen der gleichen Abfrage auf jeder einzelnen version. SQL Server 2000 ist 13 Jahre alt und mehrere Jahre zu unterstützen; sicher können Sie rechtfertigen, dass spezieller code für es. In dem Fall würde ich noch wählen Sie die Abfrage, die Sie haben über
INFORMATION_SCHEMA
nur filter out system-Objekte und temporäre Tabellen (wieder, nur relevant in der Veranstaltung Sie in tempdb):Dazu können Sie für jede Datenbank in der SQL Server 2000 auch, aber da Sie nicht verwenden können
NVARCHAR(MAX)
müssen Sie entweder verwenden Sie einen cursor, eine Reihe von Variablen, oder die in hohem Grade nicht empfohlen dokumentierte sp_msforeachdb.Können Sie die
INFORMATION_SCHEMA
schema.Ich erinnere mich nicht, ob das auch für temporäre Tabellen, Sie können jedoch einen Blick auf die anderen Spalten in
TABLES
um zu sehen, was zum filter.INFOR...
mitDBNAME.