Spalten von 2 Tabellen vergleichen und fehlende Einfügen

10/11/2009 - 15:21 von Holger Schröter | Report spam
Hallo,
ich möchte Tabelle1 mit Tabelle2 auf vorhandene Spalten prüfen und diese
anfügen. Tabelle2 hat fehlende Spalten welche in Tabelle1 vorhanden sind.
Jetzt sollen per Procedure die Spalten der Tabelle1 gelesen und in Tabelle2
die fehlenden Spalten (mit den selben Typ) eingefügt werden.
Wie bekomme ich das hin?

Vielen Dank

Holger

MSDE2000
 

Lesen sie die antworten

#1 Christoph Ingenhaag
10/11/2009 - 16:35 | Warnen spam
Hallo Holger,

wenn man alle Möglichkeiten berücksichtigst, die Reihenfolge der Spalten
übereinstimmen soll und dann noch Daten enthalten sind, machst damit du ein
Fass auf ;-). Dann benutze besser ein Tool, welches dir die Änderungsskripte
erzeugt.

Hier mal als Grundlage ein kleines Skript (die Reihenfolge der Spalten ist
aber anders, wenn zwischendrin Spalten fehlen)

if object_id('dbo.t1') is not NULL drop table dbo.t1
if object_id('dbo.t2') is not NULL drop table dbo.t2
go

create table dbo.t1
(
id int
,datum datetime not NULL
,txt varchar(10)
,guid uniqueidentifier
,usn timestamp
,chr char(3) collate SQL_AltDiction_Pref_CP850_CI_AS
,dez decimal(14,5) not NULL
,flo float
,uni nvarchar(794)
)
go
create table dbo.t2(id int)
go

declare c cursor local fast_forward for
select
'alter table dbo.t2 add ' + COLUMN_NAME + ' ' + DATA_TYPE
+case
when COLLATION_NAME is not NULL then
'(' + cast(CHARACTER_MAXIMUM_LENGTH as varchar(12)) + ') collate
' + COLLATION_NAME
else ''
end
+case
when NUMERIC_SCALE is not NULL then
'(' + cast(NUMERIC_PRECISION as varchar(12)) + ',' +
cast(NUMERIC_SCALE as varchar(12)) + ')'
else ''
end
+case
when IS_NULLABLE = 'YES' then ' NULL'
else ' NOT NULL'
end
from INFORMATION_SCHEMA.COLUMNS i1
where
i1.TABLE_SCHEMA = 'dbo' and
i1.TABLE_NAME = 't1' and
not exists
(
select 1
from INFORMATION_SCHEMA.COLUMNS i2
where
i2.TABLE_SCHEMA = 'dbo' and
i2.TABLE_NAME = 't2' and
i2.COLUMN_NAME = i1.COLUMN_NAME
)
order by
i1.ORDINAL_POSITION

declare @exec varchar(8000)

open c
fetch next from c into @exec

while @@fetch_status = 0
begin

exec(@exec)

fetch next from c into @exec

end

close c
deallocate c
go

Viele Grüße
Christoph

"Holger Schröter" schrieb im
Newsbeitrag news:
Hallo,
ich möchte Tabelle1 mit Tabelle2 auf vorhandene Spalten prüfen und diese
anfügen. Tabelle2 hat fehlende Spalten welche in Tabelle1 vorhanden sind.
Jetzt sollen per Procedure die Spalten der Tabelle1 gelesen und in
Tabelle2
die fehlenden Spalten (mit den selben Typ) eingefügt werden.
Wie bekomme ich das hin?

Vielen Dank

Holger

MSDE2000

Ähnliche fragen