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

Откуда:
Сообщений: 26
Подскажите что не так - хочу сделать урезание логов по всем базам на сервере, а получаю:
Incorrect syntax near '@MyBase'
Если вместо переменной @MyBase подставить имя базы - отрабатывает нормально.

DECLARE @MyBase varchar(32)
DECLARE @LogName varchar(32)
DECLARE MyCursor CURSOR FOR
SELECT name from master.dbo.sysdatabases order by name
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @MyBase
WHILE @@FETCH_STATUS=0
BEGIN
SET @LogName = @MyBase + '_log'
PRINT 'Таблица "'+@MyBase + '" - имя лога "' + @LogName +'"'
USE @MyBase
backup log @MyBase with truncate_only
dbcc shrinkfile (@LogName,1,Truncateonly)
FETCH NEXT FROM MyCursor INTO @MyBase
END
CLOSE MyCursor
DEALLOCATE MyCursor
30 окт 09, 15:00    [7862857]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция Use внутри курсора  [new]
msLex
Member

Откуда:
Сообщений: 7887
use не работает с переменными, используйте динамический запрос.
30 окт 09, 15:02    [7862884]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция Use внутри курсора  [new]
Faso
Member

Откуда:
Сообщений: 26
Подтолкинте пожалуйста, я не спец в этой области...
30 окт 09, 15:03    [7862900]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция Use внутри курсора  [new]
Faso
Member

Откуда:
Сообщений: 26
Разобрался:

exec('USE '+@MyBase + '; backup log '+@MyBase+' with truncate_only; dbcc shrinkfile ('+@LogName+',1,Truncateonly)')
30 окт 09, 15:31    [7863158]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция Use внутри курсора  [new]
Crimean
Member

Откуда:
Сообщений: 13148
declare @procname sysname
set @procname = @dbname + '.dbo.sp_executesql'

declare @cmd nvarchar(max)
set @cmd = N' чо там надо было делать '

declare @retcode int
exec @retcode= @procname @cmd
30 окт 09, 22:31    [7865260]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить