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

Откуда: Northern Сapital
Сообщений: 71
Хочу перебрать и пожать таблицы базы, но ручками каждый раз вводить в скрипте каждую таблицу как-то некошерно. Отсюда вопрос: можно ли циклом перебрать все таблицы в таком запросе:
USE моябаза
ALTER TABLE [dbo].[имятаблицы1]REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)
ALTER TABLE [dbo].[имятаблицы2]REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)
.....
и т.д.
Заранее благодарен.
17 сен 09, 09:00    [7670979]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
sp_msforeachtable
17 сен 09, 09:11    [7671007]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
SELECT * FROM INFORMATION_SCHEMA.TABLES

+ динамический SQL, как вариант...
17 сен 09, 09:23    [7671036]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
hawkhawk
Member

Откуда: Northern Сapital
Сообщений: 71
Дедушка
sp_msforeachtable

Не понимает такой команды напрочь.
ЗЫ: забыл сказать, что скула 2008
DENIS_CHEL
SELECT * FROM INFORMATION_SCHEMA.TABLES

Не... отваливается дальше по синтаксису REBUILD
DENIS_CHEL

+ динамический SQL, как вариант...

В 2х словах: что Вы имеете ввиду, упоминая про динамический SQL?
17 сен 09, 20:44    [7676016]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
RadioTalks
Member

Откуда: Харьков
Сообщений: 13
hawkhawk
Дедушка
sp_msforeachtable

Не понимает такой команды напрочь.
ЗЫ: забыл сказать, что скула 2008
DENIS_CHEL
SELECT * FROM INFORMATION_SCHEMA.TABLES

Не... отваливается дальше по синтаксису REBUILD
DENIS_CHEL

+ динамический SQL, как вариант...

В 2х словах: что Вы имеете ввиду, упоминая про динамический SQL?


-- sp_execsql и т.д.
17 сен 09, 21:53    [7676151]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
hawkhawk
Member

Откуда: Northern Сapital
Сообщений: 71
В ходе полупонятных манипуляций, данный вопрос решился с помощью этого
T-SQL:
use моябаза
SET NOCOUNT ON
DECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U' order by 1
OPEN tables_cursor
DECLARE @tablename varchar(50)

FETCH NEXT FROM tables_cursor INTO @tablename

WHILE (@@fetch_status <> -1)
BEGIN
SELECT @tablename = quotename(@tablename, '[]')
DECLARE @CMD VARCHAR(100)
SELECT @CMD = 'ALTER TABLE'+@tablename+'REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)'
EXEC (@CMD)
FETCH NEXT FROM tables_cursor INTO @tablename
END
DEALLOCATE tables_cursor
SET NOCOUNT OFF

Правда закрадывается ощущение, что здесь как-то коряво, хоть и отрабатывает без ошибок. Может кто-нить из Гуру меня подправит? Спасибо.
17 сен 09, 22:44    [7676225]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
hawkhawk
Member

Откуда: Northern Сapital
Сообщений: 71
Дедушка
sp_msforeachtable

почему не работает:
use моябаза
exec sp_msforeachtable @command1= 'ALTER TABLE''?''''REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)'

Спасибо.
17 сен 09, 23:04    [7676260]     Ответить | Цитировать Сообщить модератору
 Re: По запросу с ALTER подскажите плиз  [new]
hawkhawk
Member

Откуда: Northern Сapital
Сообщений: 71
Подглядывание в чужие тетрадки привело к окончательной формуле:

declare @cmd1 nvarchar(1000) = 'alter table ? rebuild partition = all with (data_compression = page)'
declare @cmd2 nvarchar(1000) = 'alter index all on ? rebuild partition = all with (data_compression = page)'
exec sp_MSforeachtable @command1 = @cmd1, @command2 = @cmd2

Война окончена. Всем спасибо. :)
18 сен 09, 07:20    [7676585]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить