Aktualisieren von Tabellen ohne Nennung aller Spalten
Ich habe einen Weg gefunden, um zwei Tabellen aus unterschiedlichen Datenbanken, die einander entsprechen, mit dieser Vorlage:
INSERT [DestDB].[dbo].[TABLE]
SELECT source.* FROM
[SourceDB].[dbo].[TABLE] AS source
LEFT OUTER JOIN
[DestDB].[dbo].[TABLE] AS dest
ON
source.[PKColumn] = dest.[PKColumn]
WHERE dest.[PKcolumn] IS NULL
UPDATE dest
SET
dest.[PK_COLUMN1] = source.[PK_COLUMN1]
,dest.[COLUMN2] = source.[COLUMN2]
,dest.[COLUMN3] = source.[COLUMN3]
,dest.[COLUMN4] = source.[COLUMN4]
,dest.[COLUMN5] = source.[COLUMN5]
,dest.[COLUMN6] = source.[COLUMN6]
,dest.[COLUMN7] = source.[COLUMN7]
,dest.[COLUMN8] = source.[COLUMN8]
FROM
[SourceDB].[dbo].[TABLE] AS source
INNER JOIN
[DestDB].[dbo].[TABLE] AS dest
ON source.[PK_Column1] = dest.[PK_Column1]
Jedoch einige Tabellen arbeite ich mit mindestens 200 Spalten und zwar ist es möglich, dies zu tun durch die Kraft von Copy + Paste, nur muss ich wissen ob es eine Möglichkeit gibt, die nicht die mir immer das Karpaltunnelsyndrom.
Ich bin mit Microsoft SQL Server 2005.
Irgendwelche Ratschläge?
- Tun alle Spalten aus den beiden Tabellen (Ziel und Quelle) übereinstimmen?
- Ja, Sie tun, entsprechen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, können Sie Spalten aktualisieren ohne Nennung von Ihnen, aber Sie können SQL-und die sys.Spalten-Ansicht, die das Scripting für Sie:
-- output --
Der einzige andere Weg ist, um NICHT die update, sondern abschneiden der Ziel-Tabelle, und führen Sie eine
SELECT INTO
Können Sie dynamisches sql verwenden (und die info @ChrisGessler zur Verfügung gestellt) zu tun, was Sie wollen.
Andere Möglichkeit, wenn Sie nicht können oder nicht wollen, es zu benutzen, ist:
Schritt 1. Mai so etwas wie dieses:
Denken Sie daran, um die drop neue_tabelle am Ende.