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
					
		
	 
		
								
					
				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
		
		
	 
	
		
								
					
				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