2016-07-28 5 views
0

Wie wählt man Datenbanktabellen aus, in denen sie zwei oder mehr Spalten haben?Wie wählen Sie Datenbanktabellen aus, in denen sie zwei oder mehr Spalten enthalten?

Der hier zeigt Tabellen mit CustomerName in ihnen. Um eine weitere zu suchende Spalte hinzuzufügen, muss ich möglicherweise eine weitere Unterabfrage in der Unterabfrage hinzufügen.

Ich bin auf der Suche nach einer einfachen Abfrage, wo ich x Anzahl der Spalten hinzufügen kann, ohne Komplexität hinzuzufügen.

SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE t.name in (select t.name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where c.name LIKE '%CustomerID%') 
ORDER BY schema_name, table_name; 

UPDATE
würde der Operator LIKE

+0

Meinst du, Sie wollen eine Liste von Tabellen, die ALLE der angegebenen Spalten enthalten, oder eine von ihnen? –

+0

Alle angegebenen Spalten –

+0

@Dudi Konfino Es wird nicht Like verwendet und Sie haben nichts Zusätzliches über Chris 'Antwort hinzugefügt. –

Antwort

0

Angenommen, Sie Tabellen möchten, enthalten alle Spaltennamen Sie bieten eine einfache Möglichkeit, ohne Unterabfragen sein könnte verwenden möchten:

SELECT t.name AS table_name, 
     SCHEMA_NAME(t.schema_id) AS schema_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.name IN('COL1', 'COL2') -- Column names in here 
GROUP BY t.name, SCHEMA_NAME(t.schema_id) 
HAVING COUNT(DISTINCT c.name) = 2 -- Match the count of columns in the IN criteria 
ORDER BY SCHEMA_NAME(t.schema_id), t.name; 
+0

Es funktioniert nicht. Ich habe es ausprobiert, indem ich zwei Spalten benutzte, von denen ich weiß, dass sie in einer Tabelle existieren, und die Abfrage gab nichts zurück. Außerdem bevorzuge ich den LIKE-Operator, weil ich manchmal nicht sicher bin, welche Spaltennamen verwendet werden, oder weil Inkonsistenzen in Spaltennamen auftreten, zB: candid und customerid –

+0

Funktioniert für mich, versuchen Sie folgendes Skript: https://gist.github.com/chrispickford/5c8f7079dc0b2253f1047bff628f5acc –

+0

Um den LIKE-Operator zu verwenden, müssen Sie verschachtelte Unterabfragen verwenden, da der Fuzzy-Abgleich möglicherweise mehrere Spaltennamen pro Prädikat zurückgibt. –

Verwandte Themen