2016-05-18 9 views
0

Ich habe eine Demografie-Tabelle und eine Employee-Tabelle, von denen jede eine Geschlecht Spalte mit Werten wie M, F und U enthält. Es gibt eine andere Tabelle namens Parameter, die eine Beschreibung und Feldnamen für diese Werte also:Tabelle speichern Flag oder Parameterwerte

Description Field_name Value 
Male    DEMCD  M 
Female   DEMCD  F 
Unknown   DEMCD  U 
Male    EMPDC  M 
Female   EMPDC  F 

Es gibt mehrere Fälle, in denen diese Werte in anderen Tabellen neben der demographischen Tabelle (zB Mitarbeiter-Tabelle) verwendet werden. Gibt es eine Möglichkeit, herauszufinden, welcher Feldname mit welcher Tabelle markiert ist, und den Namen dieser Tabelle?

+0

Zur Klärung der problen haben Bitte zeigen Sie die Tabellenstruktur der Mitarbeiter und die Beispieldaten an. – Serg

+0

@ConradFrix hat versucht, die von Ihnen angegebene Abfrage auszuführen und hat einen Fehler erhalten: Der Sortierkonflikt zwischen "Latin1_General_CS_AI" und "SQL_Latin1_General_CP1_CI_AS" in der Operation "equal to" konnte nicht aufgelöst werden. – Khatra

Antwort

0

In SQL Server können Sie Tabellen in sys.tables und Spalten in sys.columns finden. Als Beispiel eine Abfrage, wie dies für die Spalten suchen verwenden kann, wo immer sie existieren (dies setzt voraus, die Spalten etwas konsistent im Namen haben):

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 
     AND c.name LIKE '%YourColumnName%' 

Sie auch zu Ihrer Parametertabelle mit diesen Kriterien binden könnten , wenn alle Feldnamen existieren:

AND c.name IN (SELECT DISTINCT Field_name FROM Parameter) 

wenn Sie aus den Tabellen auswählen können, möchten Sie zu finden, können Sie eine Spalte wie diese zu Ihrer select-Klausel hinzuzufügen:

'SELECT * FROM [' + SCHEMA_NAME(schema_id) + '].[' + t.name + '] WHERE [' + c.name + '] IN (''Value1'',''Value2'')' AS select_code_val 

Sie können dies manuell Kopieren/Einfügen, und führen Sie es als dynamisches SQL innerhalb eines größeren gespeicherte Prozedur ausführen, usw.

+0

ok, das half die Hälfte des Problems gelöst, aber woher weiß ich, dass der Feldname diesen Tabellen zugeordnet ist? – Khatra

+0

Hier kommt die Verknüpfung zwischen sys.tables und sys.columns. Diese Abfrage zeigt die Tabelle an, die die Spalten enthält, die die Suchkriterien erfüllen. – morgb

+0

Großartig, ich habe eine letzte Frage. Gibt es eine Möglichkeit, die ich finden könnte, wenn die Spalte fest codierte Werte hat, d. h. Geschlecht Spalte hat M, F, U oder State-Spalte enthält alle Zustände? – Khatra

0

Diese Sie die Liste der Objekte wird, die eine bestimmte Spalte

select so.name from sys.objects so inner join sys.columns sc 
on so.object_id = sc.object_id 
where sc.name = 'yourcolumnname' 
Verwandte Themen