«

»

maio 15

Como usar Cursor – Explicado

Neste artigo vamos explicar através dos comentários abaixo como funciona o cursor do SQL. Este recurso permite que você faça um select e armazene os dados em uma variável, como se fosse um array. Com isso é possível fazer um for each, while, etc.

Vamos começar declarando as variáveis e logo depois de atribuir o valor da variável @Date começam as explicações sobre o cursor.

DECLARE @DBname VARCHAR(20) — nome da base
DECLARE @path VARCHAR(256) — caminho do backup
DECLARE @FileName VARCHAR(256) — nome do arquivo de backup
DECLARE @Date VARCHAR(20) — parte do nome do arquivo de backup

SET @path = ‘C:\Backup\’ — altere aqui o caminho do backup (a pasta deve existir)

— coloca a data no formato Aug 18 2011 8:23PM na variavel Date
SELECT @Date = CONVERT(VARCHAR(20),GETDATE(),120)

— substitui os espacos por underline _ e deixa Aug_18_2011_8:23PM
SET @Date = REPLACE(@Date, ‘ ‘, ‘_’)

— substitui o sinal dois pontos por ponto e fica Aug_18_2011_8.23PM
SET @Date = REPLACE(@Date, ‘:’, ‘.’)

— abre o cursor e insere o nome das bases exceto as default
DECLARE db_cursor CURSOR FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOT IN (‘master’,’model’,’msdb’,’tempdb’)

— abre o cursor para utilizar
OPEN db_cursor

— coloca a proxima linha encontrada dentro do cursor na variavel DBname
FETCH NEXT FROM db_cursor INTO @DBname

— enquanto não terminam as linhas dentro do cursor, comecar
WHILE @@FETCH_STATUS = 0
BEGIN

— coloca dentro da variavel fileName o nome e caminho do arquivo concatenado
SET @fileName = @path + @DBname + ‘_’ + @Date + ‘.BAK’

— faz o backup full da base que veio do cursor e esta na variavel DBname
BACKUP DATABASE @DBname TO DISK = @fileName

— move o foco do cursor para a proxima linha e coloca este proximo dado na variavel DBname
FETCH NEXT FROM db_cursor INTO @DBname

— indica que deve voltar ao begin
— (somente se o FETCH_STATUS não for zero, ou seja, nao acabaram os dados dentro dele)
END

— quando o FETCH_STATUS for zero, vai pular direto para esta linha
— fecha o cursor
CLOSE db_cursor

— desaloca o cursor liberando a memoria
DEALLOCATE db_cursor.

Deixe uma resposta