08. december 2009 - 11:32Der 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
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.......
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
';
Synes godt om
Ny brugerNybegynder
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.