Snabb kodgenerering

Oopps! Upgrade your browser pretty please.Oopps! Upgrade your browser pretty please.

Ibland har man behov av att snabbt göra backup av alla databaser på en instans. Om man då inte redan har fördefinierade jobb eller andra färdiga skript kan man använda sig av ett litet knep. Systemtabeller eller vyer innehåller metadata som kan vara användbara, exempelvis sys.databases som bla innehåller alla databasnamn. Om jag nu snabbt vill generera T-SQL kod för att ta backup av alla databaser skulle det kunna bli ungefär såhär: SELECT ‘BACKUP DATABASE ‘ + name + ‘ TO DISK = ”C:Temp’ + name + ‘.bak”’ FROM sys.databases

Förutsatt att man inte har några user databaser ger denna kodsnutt följande output i resultatfönstret som man sedan kan kopiera och klistra in i ett nytt queryfönster och köra: BACKUP DATABASE master TO DISK = ‘C:Tempmaster.bak’ BACKUP DATABASE modelTO DISK = ‘C:Tempmodel.bak’ BACKUP DATABASE msdb TO DISK = ‘C:Tempmsdb.bak’ BACKUP DATABASE tempdb TO DISK = ‘C:Temptempdb.bak’

Nu är det inte tillåtet att ta backup på tempdb men detta är som sagt bara ett exempel på användningsområdet. Om man istället vill köra ett specifikt kommando mot alla databaser (eller vissa databaser om man så vill) går även det. Säg att vi tex vill köra sp_spaceused mot alla user databaser: SELECT ‘USE ‘ + name + ‘ GO EXEC sp_spaceused’ FROM sys.databases WHERE name NOT IN (‘master’,’model’,’msdb’,’tempdb’) Kräver dock att man returnerar svaret i textform (Ctrl+T) annars försvinner radbrytningarna.

Detta är bara några exempel och som vanligt är det bara den egna fantasin som sätter gränserna för vad man kan åstadkomma med T-SQL 🙂
/Jan Nieminen