Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Динамический Beckup  [new]
intruders
Member

Откуда:
Сообщений: 140
За рание извеняюсь за кривизну кода, но всё же. Есть скрипт
declare @db varchar(30), @dbname varchar(30), @Description varchar(255),@patch varchar(30) 

--создание курсора баз с парметрами и проверка версии SQL
declare @Version varchar(5)
declare @tbname varchar(10)
	set @Version=(SELECT substring(convert(varchar,SERVERPROPERTY('ProductVersion')),0,2))

if @Version>=9
	begin
		set @tbname='sys.databases'--SQL 2005 и выше
	end
	else
		set @tbname='sys.sysdatabases'--SQL 2000 и ниже

declare db_cursor CURSOR FOR select name from @tbname
	where name <> 'master' and name <> 'model' and 
		  name <> 'tempdb' and name <> 'msdb'
	open db_cursor FETCH next FROM db_cursor INTO @db

WHILE @@fetch_status = 0
	begin
		--переменне пути, файлов бекапа и описания
		set @dbname=@db+'.bkp'
		set @patch='G:\backup\' + @dbname
		SET @Description = @DB + '_' +convert(varchar,getdate(),104)
		
		--Создание бекапов
		--BACKUP DATABASE @db TO  DISK = @patch
		--WITH NOFORMAT, INIT,  NAME = @Description, SKIP, REWIND, NOUNLOAD,  STATS = 10
print @dbname
        FETCH next FROM db_cursor INTO @DB
	end
CLOSE db_cursor
DEALLOCATE db_cursor


при комипиляции ругается на Must declare the table variable "@tbname". Не может найте в этом куске кода
declare db_cursor CURSOR FOR select name from @tbname
	where name <> 'master' and name <> 'model' and 
		  name <> 'tempdb' and name <> 'msdb'
	open db_cursor FETCH next FROM db_cursor INTO @db

хотя выше она задекларировна.
30 мар 12, 13:53    [12340136]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Во from долна стоять таблица, функции или табличная переменная. А не обычная скалярная переменная.
30 мар 12, 13:56    [12340154]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
intruders
Member

Откуда:
Сообщений: 140
а как правильно сделать?
30 мар 12, 13:58    [12340170]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И далее.

Во-первых, есть Maintenance Plan, где вообще писать ничего не надо.
Во-вторых, есть sp_msforeachdb, где не надо городить огород с перебором всех БД.
30 мар 12, 13:58    [12340177]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
intruders
а как правильно сделать?
Задать в секции from функцию, таблицу или табличную переменную.
30 мар 12, 13:59    [12340182]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
intruders
а как правильно сделать?

Не использовать переменную, а написать два разных селекта из 2-х разных таблиц.
30 мар 12, 22:59    [12343683]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Beckup  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
intruders,

Вот здесь - https://www.sql.ru/forum/actualthread.aspx?tid=906770&hl=flexgen есть пример скрипта, посмотри, вдруг пригодится.
1 апр 12, 14:07    [12347157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить