2016-03-24 16 views
0

Ich habe insgesamt 10 Tabellen in meiner SQL Server-Datenbank. Von diesen 5 Tabellen haben 21 Spalten und die ersten 5 Spalten und die letzten 3 Spalten haben den gleichen Namen.Wählen Sie SQL-Tabellennamen mit Spaltenanzahl und Name

Wie kann ich eine SQL-Abfrage schreiben, die mir den Namen dieser 5 Tabellen auswählt.

[Tabellennamen auswählen Spaltenanzahl und Spaltennamen aus einer SQL Server-Datenbank]

ZB: -

Datenbankname - SampleDB

Tabellen in SampleDB sind

  1. dbo.sample1
  2. dbo.beispiel2
  3. dbo.sample3
  4. dbo.sample4
  5. dbo.sample5
  6. dbo.sample6
  7. dbo.sample7
  8. dbo.sample8
  9. dbo.sample9
  10. dbo.sample10

Darin enthalten die Tabellen [dbo.sample1, dbo.sample4, dbo.sample5, dbo.sample7, dbo.sample9] jeweils 21 Spalten. Auch die ersten 5 col Umnamame und letzter 3 Spaltenname sind für diese 5 Tabellen identisch. Ich brauche eine Abfrage, die den Namen dieser 5 Tabellen auswählt.

Die Ausgabe wird wie sein

1 dbo.sample1
2 dbo.sample4
3 dbo.sample5
4 dbo.sample7
5 dbo.sample9

Ist es sinnvoll?

+0

Bearbeiten Sie Ihre Frage zu vergleichen und Beispieldaten und die gewünschten Ergebnisse zu liefern. –

+0

In MS SQL möchten Sie aus sys.objects auswählen ... Aber es ist nicht klar, welche Datenbank Sie sprechen –

Antwort

2

i MS SQL 2012 Server-Syntax schreiben (TSQL)

Faust Schritt, um Ihr Problem zu lösen ist, um herauszufinden, weichen Tabellen x (21) Felder aus.

SELECT 
    So.Name AS TableNames, 
    COUNT(Sc.Name) AS FieldCounter 
FROM 
    Sysobjects AS So -- List of Tables 
LEFT OUTER JOIN 
    SysColumns AS Sc -- List of Fields 
ON So.id = sc.ID 
WHERE 
    So.xtype = 'U'  -- only show for **U**ser sables 
GROUP BY 
    So.name 
HAVING COUNT(Sc.Name) = 21 -- 21 fields in table 

Danach haben Sie die eingereichten Namen

+0

Vielen Dank. Gibt es eine Möglichkeit, die Anzahl der Datensätze in jeder Tabelle zusammen mit den TableNames und FieldCounter anzuzeigen? :) – san

0

So etwas ähnliches? (Im Fall von SQL Server)

select t.name, c.name, count(*) as duplicate_count from sys.tables t 
inner join sys.columns c on c.object_id = t.object_id 
group by t.name, c.name 
having count(*) > 1