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

Откуда:
Сообщений: 325
Здравствуйте.

Нужно создать таблицу с логами выполнения запросов на подобии:

IDSectionStepStartTimeRunTime
1ADivisions23.06.2014 1:41:19 00:01:12
2BGoods23.06.2014 1:42:31 00:04:35
3............


Где ID - это номер операции. Section - идентификатор хранимой процедуры (это для меня, сам для каждого запроса буду проставлять), Step - наименование запроса (в моем примере таблицы это запросы создания справочника подразделений и товаров), StartTime - время начала выполнения запроса, RunTime - время выполнения запроса.

Написал Create данной таблицы. В SQL только начал разбираться, знаний очень мало.

CREATE TABLE [dbo].[Update_Log](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Section] [char](1) NOT NULL,
	[Step] [varchar](50) NOT NULL,
	[StartTime] [smaldatetime] NOT NULL,
	[RunTime] [Time] (0) NULL );


Перед каждым запросом (или блоком запросов) у меня должен выполняется UPDATE.
Который и будет добавлять данные в таблицу.
Вопрос такой: как должен выглядеть данный UPDATE.

Написал такой UPDATE:
INSERT INTO Update_Log ([Section],[Step],[StartTime])  VALUES ('A', 'Division', SUSDATE, 00:00:00);


Естественно данный запрос не работает. Подскажите как правильно добавить текущее время?

Далее думаю после завершения всех запросов можно написать запрос, который бы обновлял время выполнения всех запросов с 00:00:00 на вычисляемое значение.

Как вставить вычисляемое значение вроде понятно. Вопрос такой: правильно ли таким образом вставлять время выполения запроса? Или есть более правильны способ?
23 июн 14, 08:46    [16204621]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Im_Max,

INSERT INTO Update_Log ([Section],[Step],[StartTime],runtime)  
VALUES ('A', 'Division', GETDATE(), 00:00:00);
23 июн 14, 09:20    [16204692]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
Получилось, но дата вставляется с округлением до минут, а мне нужно до секунд.
23 июн 14, 09:31    [16204711]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
И еще, толькj что заметил ошибку. Везде где написано UPDATE должно быть INSERT.
23 июн 14, 09:32    [16204718]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Im_Max
Получилось, но дата вставляется с округлением до минут, а мне нужно до секунд.
Вы выбрали тип данных у поля [StartTime] для хранения даты "smalldatetime", а он хранит с округлением до минуты.

Измените тип на datetime
23 июн 14, 09:47    [16204788]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Im_Max,

тип [StartTime] [smaldatetime] NOT NULL,
в определении таблицы поменяйте datetime, тогда будут и секунды
23 июн 14, 09:48    [16204792]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
У меня в книжке написано что в этом формате хранятся данные до секунды.
Поставил DateTime - выводит дату с тремя знаками после секунды. Какой формат можно использовать что бы выводились данные в виде: 23.06.2014 1:42:31
С секундами но без миллисекунд.
23 июн 14, 09:51    [16204813]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
Нашел. DateTime2(0)

Всем большое спасибо.
23 июн 14, 09:52    [16204824]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
А второй вопрос.

Как вычислить затем RunTime?
Для ID = 1
RunTime = RunTime (ID=2) - RunTime (ID=1)
23 июн 14, 10:00    [16204860]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Im_Max
Member

Откуда:
Сообщений: 325
Придумал делать так:
в конце запроса выполнять
UPDATE [dbo].[Update_Log] SET [RunTime] = GetDate() - [StartTime]
WHERE [Update_Log].[ID] = ( SELECT max(ID) FROM [dbo].[Update_Log] )


Тогда не нужен итоговый UPDATE. Остался только один вопрос: Правильно так вообще считать время выполнения запроса. Мне кажется что мой способ какой-то кривой.
23 июн 14, 10:09    [16204904]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с логами выполнения запросов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
datediff()
23 июн 14, 12:10    [16205652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить