2012-03-23 18 views
1

Ich möchte Tabellen in SQL Server nach einer Tabelle mit zwei bestimmten Spaltennamen (SpalteA und SpalteB) durchsuchen. Ich habe eine Abfrage, die auf einer Spalte Name suchtSQL Server-Tabellen mit zwei angegebenen Spaltennamen finden

SELECT name FROM sysobjects WHERE id IN 
(SELECT id FROM syscolumns WHERE name = 'columnA') 

Ich weiß nicht, wie Sie dies ändern, um nach zwei Spalten zu suchen.

+0

Sie haben eine nicht funktionierende Antwort gewählt. – JotaBe

+0

Sie haben Recht ... Ich habe die Auswahl geändert –

Antwort

8
SELECT name FROM sysobjects WHERE id IN 
(SELECT id FROM syscolumns WHERE name = 'columnA') 
and id in 
(SELECT id FROM syscolumns WHERE name = 'columnB') 

sollte es tun.

1

Probieren Sie etwas wie:

select syscolumns.id, sysobjects.name from syscolumns 
    join sysobjects so on sysobjects.id = syscolumns.id 
where exists (select 1 from syscolumns sc where sc.id = syscolumns.id and name = 'columnA') 
    and exists (select 1 from syscolumns sc2 where sc2.id = syscolumns.id and name = 'columnB') 
+0

Ich denke, Sie können die Tabelle nicht mit dem ursprünglichen Namen verweisen, wenn Sie ihm einen anderen Alias ​​zugewiesen haben. (Ich spreche von 'sysobjects'.) –

1

Dies ist der richtige Weg, es zu tun:

select so.name 
from sysobjects so 
where so.type = 'U' -- it's a user's table 
and exists (select * from syscolumns sc where sc.id = so.id and sc.name='columnA') 
and exists (select * from syscolumns sc where sc.id = so.id and sc.name='columnB') 

Es ist wichtig zu überprüfen, ob sie Tabelle ein Benutzer ist. Im Gegenteil, Sie können Ansichten, Tabellenfunktionen usw. finden.

Verwandte Themen