Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2017, 10:53   #1
Стогелитская
 
Регистрация: 28.04.2017
Сообщений: 7
По умолчанию Реорганизация индексов

Здравствуйте, у меня есть два вопроса скажите как связать две команды ALTER через if/else и как поставить так, чтобы запрос работал допустим 20-го числа в 20 вечера?

select a.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(N'[dbo].[Manh_LOT]'), NULL, NULL, NULL) AS a
if avg_fragmentation_in_percent>=30.0
then ALTER INDEX Manh_LOT_DATE_TIME_STAMP ON [dbo].Manh_LOT REBUILD WITH (FILLFACTOR = 90, SORT_IN_TEMPDB = ON);
else ALTER INDEX Manh_LOT_DATE_TIME_STAMP ON [dbo].Manh_LOCATION REORGANIZE
end;
Стогелитская вне форума Ответить с цитированием
Старый 28.04.2017, 11:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

IF ... ELSE есть же в процедурном языке. Напиши sql-скрипт или процедуру и вызывай, используя sqlcmd и планировщик Windows
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.04.2017, 11:40   #3
Стогелитская
 
Регистрация: 28.04.2017
Сообщений: 7
По умолчанию

Подскажите, пожалуйста, по синтаксису, сейчас этот скрипт с ошибками, как связать if/else с alter и как написать, чтобы он выполнялся в определенное время без задания.
Стогелитская вне форума Ответить с цитированием
Старый 28.04.2017, 11:45   #4
Стогелитская
 
Регистрация: 28.04.2017
Сообщений: 7
По умолчанию

У меня есть две команды
--Перестроение
ALTER INDEX Manh_LOT_DATE_TIME_STAMP ON [dbo].Manh_LOT REBUILD WITH (FILLFACTOR = 90, SORT_IN_TEMPDB = ON);
GO
--Реорганизация
ALTER INDEX Manh_LOT_DATE_TIME_STAMP ON [dbo].Manh_LOCATION REORGANIZE
GO

их нужно связать в одну через if/else или мб нужно использовать case?
Стогелитская вне форума Ответить с цитированием
Старый 28.04.2017, 12:45   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
DECLARE @a float
SELECT @a=avg_fragmentation_in_percent FROM ...
IF @a>=30
  ALTER ...
ELSE
  ALTER ...
Цитата:
чтобы он выполнялся в определенное время без задания
без задания чего? А с заданием времени в планировщик заданий
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.04.2017, 12:50   #6
Стогелитская
 
Регистрация: 28.04.2017
Сообщений: 7
По умолчанию

Без планировщика заданий, у нас очень большая база, есть таблицы которые обновляются каждые 15 минут, поэтому хотелось бы в самой процедуре написать, чтобы обновление индексов было в определенное время в определенный день. Буду очень благодарна, если подскажите как это сделать.
Стогелитская вне форума Ответить с цитированием
Старый 28.04.2017, 12:57   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если бы знал, то подсказал бы. А так не слышал о такой возможности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.04.2017, 21:54   #8
hoolygan
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 64
По умолчанию

А процедура с условием волшебным образом как и когда запускаться будет? Делайте джобик, и кормите ему процедуру-обертку с условием ребилда. Но по опыту, если ребилд нужен каждый день - стоит сменить программистов, которые создавали структуру и пишут процедурки. Хотя... может это 1с?
hoolygan вне форума Ответить с цитированием
Старый 29.04.2017, 10:17   #9
Стогелитская
 
Регистрация: 28.04.2017
Сообщений: 7
По умолчанию

Ребилд или реорганизацию индексов не нужно делать каждый день. Нужно делать раз в неделю в определенное время.
Смотрите, есть процедура которая тянет информацию с других источников каждые 15 минут,нужно в конце данной процедуре написать, что если такое-то число то сделать то-то или допустим, если сейчас 20-ое число то нужно выполнить такую-то команду. Нужно брать системное число и время, вот в этом вопрос, как это сделать.
Стогелитская вне форума Ответить с цитированием
Старый 29.04.2017, 10:34   #10
hoolygan
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 64
По умолчанию

Getdate () и datefropparts () если это ms sql могут помочь в решении, сравнивайте число, и запускайте. Но как по мне - это костыль. Работайте с джобами и планировщиком, как уже говорили.
hoolygan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка индексов Jevshot Паскаль, Turbo Pascal, PascalABC.NET 3 28.10.2015 08:07
Много индексов + игнорирование индексов Mr_freeman SQL, базы данных 5 06.08.2013 22:09
Реорганизация интерфейса The_Immortal C++ Builder 3 10.05.2012 02:14
Создание индексов Droid SQL, базы данных 5 02.02.2012 16:30
удаление индексов массива TotKtoNado БД в Delphi 13 05.08.2011 17:03