Tabellen vergleichen ohne key zu benutzen

Hallo zusammen!
Ich befürchte langsam ich will was unmögliches, aber vielleicht habt ihr ja ne Idee.
Ich habe unterschiedliche Datenbanken (auf dem gleichen Server).
Diese DBs haben auch die gleichen Tabellen (zumindest interessieren mich nur diese).
Diese Tabellen haben auch die gleichen Definitionen.
Und sollten auch die gleichen Inhalte haben, und ganau das soll ich testen.
Problem bei der Sache ist, dass die Tabellen grundsätzlich Autowerte als key haben, und der stimmt halt in den meißten fällen genau nicht überein, was mir ja egal wäre, solange der Rest gleich ist.
Ich bin soweit, dass ich mittels

SELECT ‚DB1‘ AS Datenbank, * FROM
(SELECT * FROM Tabelle1
EXCEPT
SELECT * FROM Tabelle2) x
UNION ALL
SELECT ‚DB2‘ AS Datenbank, * FROM
(SELECT * FROM Tabelle2
except
select * FROM Tabelle1) x

Eine Liste meiner Sätze habe, die nur in einer der beiden DBs vorkommen. Hierfür musste ich jedoch jeweils die Schlüsselspalte aus meinen Tabellen rauslassen (ich arbeite also momentan auf Kopien).
Nun das Problem: Wie komme ich nun wieder an den schlüssel aus meiner Originaltabelle ran?
Damit ich sagen kann der Satz aus DB1 mit dem key xx fehlt in DB2 ??
Hat jemand verstanden was ich will und dann auch noch ne Idee, wie das gehen könnte?
Vielen Dank schonmal fürs Grübeln.
LG, Fredda

Ist übrigens SQL Server 2005
Hatte ich vergessen zu erwähnen *grins*

Moin, Fredda,

ich arbeite also momentan auf Kopien.

das wäre nicht nötig, wenn Du anstatt „select *“ „select feld1, feld2, …“ schreiben würdest.

Nun das Problem: Wie komme ich nun wieder an den schlüssel aus
meiner Originaltabelle ran?

Indem Du den „select ID“ mit der kompletten Feldliste in der Where-Klausel absetzt. Dabei musst Du übrigens mit Mehrfachtreffern rechnen.

Gruß Ralf

UNBEKANNTE Tabellen vergleichen ohne key
Okay - da habe ich in meiner Frustration die wichtigste Information vergessen:
Ich kenne nur die Namen der Tabellen, die ich vergleichen soll. Sprich ich weiß garnicht, wie meine Felder heißen…

Hi Fredda,

dann mach Dich schlau: Syscatalog, Systables und SysColumns oder so ähnlich heißen die Tabellen, in denen die Spaltennamen verwaltet werden.

Gruß Ralf

Hi

dann mach Dich schlau: Syscatalog, Systables und SysColumns
oder so ähnlich heißen die Tabellen, in denen die Spaltennamen
verwaltet werden.

Jupp, SYSTABLES und SYSCOLUMS sollte aber ausreichen. Über die SYSTABLES suchst du nach dem Namen und joinst dann über die ID aus der SYSCOLUMNS die Spalten. In letzterer ist das ID-Feld vermerkt, entweder über XTYPE oder eine andere Spalte der SYSCOLUMNS (müsste ich erst nachgucken, wenn Du es nicht findest). Den eigentlichen Query kannst Du dann dynamisch zusammenbauen und ausführen (sp_executesql).

Grüße
m4tt3n