Avatar billede havmaage Juniormester
15. december 2010 - 16:00 Der er 4 kommentarer og
1 løsning

loop gennem flere databaser

Hej!
Jeg har en database server med mange næsten ens databaser, jeg kunne godt tænke mig et script der kunne udføre sql/ddl statement på en enkelt udvalgt tabel i hver database

Jeg kan godt loope over navnet og genere det rigtigt i variablen, men når jeg vil anvende det fejler det.

Det er ved

use @dbnavn
select count(*) from tabel
go

nogen er ved hvordan ?


declare @id char(2);
declare @dbnavn varchar(100);
declare @dblist varchar(100);
declare @oldi int;
declare @i int;
set @dblist = '01,03,07,08,09,12,13,15,17,19,20,21,23,24,25,38,40,42,43,44,48,49,50,82,83';
set @i = CHARINDEX(',',@dblist);
set @oldi = 0;
while @i > 0 begin
    set @id= SUBSTRING(@dblist,@oldi+1,@i-@oldi);
    set @dbnavn = 'databasenr' + @id + '_kunde';
    if (@id = 3)
        print @dbnavn;
        use @dbnavn;
            select COUNT(*) from 2D_PULJE
        go
    set @oldi = @i;
    set @i = CHARINDEX(',',@dblist,@oldi+1)
end
Avatar billede HenrikSjang Nybegynder
15. december 2010 - 16:23 #1
Man kan ikke bruge en variable i forbindelse med en USE statement.

Løsningen kan være at samle både USE samt select'en i en dynamisk stump sql, sådan her (der er kun rettet nogle linjer nede omkring der hvor du får fejlen):

declare @id char(2);
declare @dbnavn varchar(100);
declare @dblist varchar(100);
declare @oldi int;
declare @i int;
set @dblist = '01,03,07,08,09,12,13,15,17,19,20,21,23,24,25,38,40,42,43,44,48,49,50,82,83';
set @i = CHARINDEX(',',@dblist);
set @oldi = 0;
while @i > 0 begin
    set @id= SUBSTRING(@dblist,@oldi+1,@i-@oldi);
    set @dbnavn = 'databasenr' + @id + '_kunde';
    if (@id = 3)
        print @dbnavn;
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'use [' + @dbnavn + '];
            select COUNT(*) from 2D_PULJE'
EXEC sp_executesql @sql

    set @oldi = @i;
    set @i = CHARINDEX(',',@dblist,@oldi+1)
end
Avatar billede arne_v Ekspert
16. december 2010 - 02:09 #2
eller drop USE men behold EXEC og selecte fra database..tabel
Avatar billede havmaage Juniormester
20. december 2010 - 08:55 #3
Hej Sjang tak for løsningen, arne_v ja det kunne jeg også :-) prøver mig lidt frem... Sjang vil du lægge et svar tror det er fair du får point her :-) håber du er enig arne_v
Avatar billede arne_v Ekspert
20. december 2010 - 14:58 #4
helt enig
Avatar billede HenrikSjang Nybegynder
23. december 2010 - 20:50 #5
Fino :)
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