trešdiena, 2011. gada 5. janvāris

Skripta izpilde visās datu bāzēs uz servera

Netīšām uzskrēju virsū vienai nedokumentētai procedūrai, kas man izskatās visai noderīga- sp_msForEachDB. Ar tās palīdzību var izpildīt vaicājumu visām datu bāzēm uz servera. Turpat blakus arī atradās otra nedokumentētā procedūra- sp_msForEachTable.

Te piemērs, kā to var izmantot:
EXECUTE sp_msForEachDB
        N'
            Use [?];
            declare @db nvarchar(500)
            set @db = db_name()
            print @db;
        '
Galvenā nianse ir "Use [?];". Jautājuma zīmes vietā tiek ielikts datu bāzes nosaukums (izpildāmais skripts tikai ilustrācijas nolūkos. patiesībā jau varēja īsāk)!

Savukārt otru procedūru var izmantot šādi (izvada visu tabulu nosaukumus konkrētajā datu bāzē):
EXECUTE sp_msForEachTable
        N'
            print ''?'';
        '
Varbūt ideja kā abas uztaisīt vienā (lai arī šobrīd tam nevaru iedomāties pielietojumu..)? :)
Nu labi, laikam pats arī atradu apmēram variantu (pēdiņu gan nežēlīgi daudz):
EXECUTE sp_msForEachDB
        N'
            Use [?];
            print ''?'';          
            --EXECUTE sp_msForEachTable N''print ''''~'''';'', ''~''
        '

Nav komentāru:

Komentāra publicēšana