Avatar billede TLundThuen Nybegynder
08. december 2009 - 11:32 Der er 1 kommentar og
1 løsning

flytte udvalgte records fra en database til en anden.

Hej,
jeg er på ingen måde SQL ekspert så jeg har burg for assistance. Jeg har en MS SQL 2005 database med mange tabeller. Hver tabel har en kolonne "Id". Jeg skal bruge et SQL script der looper gennem alle databasens tabeller, og kopierer
records fra hver enkelt tabel hvor id=XX. De fundne records kopieres til en kopi af den pågældende database.

pseudo må se således ud:

for hver tabel i kilde DB
slet alle records i destination db.tabel
select * where id=XX i kilde DB
kopier resultatet af select til destination db.tabel

Det er sikkert nemt nok. Man skal bare vide hvordan man gør :)

Findes der evt. et værktøj der kan hjælpe med dette?
/Thomas
Avatar billede TLundThuen Nybegynder
08. december 2009 - 14:11 #1
Er kommet lidt tættere:

EXECUTE sp_MSforeachtable 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ? AND COLUMN_NAME = "dataareaid")
BEGIN
    select * from ? where ?.dataareaid="DKB"   
END';

men jeg får fejl:
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.SYSCOMPANYGUIDUSERS" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.EMPLPARAMETERS_RU" could not be bound.
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.TAXJOURNALTRANS" could not be bound.

Jeg går ud fra at fejlen skyldes at ? where delen ikke bare returnerer tabel navn men også scheme. Kan man ikke på en eller anden måde trække tabelnavnet ud af ? cursoren. Har prøvet med SUBSTRING(?,5,50) men det virker heller ikke.......

Anyone?
Avatar billede TLundThuen Nybegynder
08. december 2009 - 15:53 #2
Så lykkedes det vist. Virker og jeg lukker spg.

EXECUTE sp_MSforeachtable
'
DECLARE @test varchar(50)
SET @test =  SUBSTRING(convert (varchar (50), "?"),8,100)
SET @test = LEFT(@test,Len(@test)-1)

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @test AND COLUMN_NAME = "dataareaid")
BEGIN
   
    select * from ? where dataareaid="c28"   
   
END

';
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester