Avatar billede havmaage Juniormester
22. oktober 2010 - 13:53 Der er 5 kommentarer og
1 løsning

læse værdier i en kommasepareret liste

Hejsa!
Jeg prøver at loope igennem en liste ( en slags string array) som er separeret af komma, men jeg får et underligt resultat ud af det.
Tror der findes en bedre måde men kan ikke rigtig finde den.


declare @i int;
declare @laengde int;
declare @id char(2);
declare @dbnavn varchar(100);
declare @dblist varchar(100);
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 @laengde = LEN(@dblist);
set @i = 0;
 
while @i <=  @laengde begin
    if SUBSTRING(@dblist,@i,1) != ','
        set @id= SUBSTRING(@dblist,@i,1);
        if LEN(@id) < 2 begin
            set @id  =  @id  + @id;
        end
           
        set @dbnavn = 'databasenr' + @id + 'xserver';
        set @i = @i +1;
        print @dbnavn;
end
Avatar billede bkp Nybegynder
22. oktober 2010 - 14:16 #1
Jeg ville gøre det ved at tjekke index af komma i stedet, så jeg har omskrevet dit script lidt:

declare @id char(2);
declare @dbnavn varchar(100);
declare @dblist varchar(100);
declare @oldi 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 + 'xserver';
    print @dbnavn;
    set @oldi = @i;
    set @i = CHARINDEX(',',@dblist,@oldi+1)
end
Avatar billede arne_v Ekspert
23. oktober 2010 - 03:58 #2
Og ved sådan noget vil jeg mene at en CLR UDF/SP ville være et godt valg.
Avatar billede bkp Nybegynder
23. oktober 2010 - 09:03 #3
arne_v -> Enig, med mindre der er en hel anden agenda end vi kan se ud af skriptet her :-)

http://stackoverflow.com/questions/58190/are-clr-stored-procedures-preferred-over-tsql-stored-procedures-in-sql-2005
Avatar billede havmaage Juniormester
23. oktober 2010 - 09:54 #4
Tak for svar og indlæg, jeg er i den situation at der ikke må anvendes/oprettes stored procedure i databaserne. Men jeg forsøger at loope over  et antal databaser. der er bygget ens op for at udføre alm. sql og ddl uden at skulle skifte instans. 



while dblist begin

use database
go
select count(*) from antalmedarb.
end

jeg ved ikke om det kan lade sig gøre endnu men det er i hvert fald planen at forsøge.
Avatar billede bkp Nybegynder
23. oktober 2010 - 18:27 #5
Hmm, er normalt ikke meget for at eksekvere strenge, men du kunne eventuelt gøre:

declare @sql varchar(500)

while .....
  set @sql = 'select count(*) from database' + dbnr + '.dbo.tabelnavn';
  exec(@sql);
end
Avatar billede havmaage Juniormester
25. oktober 2010 - 08:45 #6
mange tak for gode indlæg, jeg prøver at komme videre herfra. :-)
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