powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание генерируемого айдишника
4 сообщений из 4, страница 1 из 1
Создание генерируемого айдишника
    #39760968
plorkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Нужна помощь.
В общем хочу создать процедуру, которая будет ежедневно выполняться и показывать динамику изменения размера схем в бд.
Данные будут инсертиться в таблицу с полями session_id, schemaname, sizeinmb, date.
Проблема заключается в том, как генерить каждый день новые значения session_id для каждой схемы?
То есть это будет примерно:
Код: plsql
1.
2.
DECLARE @SESSION_ID AS BIGINT;
                  SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status) 

?

Или можно попробовать через сиквенс сделать? Подскажите, как лучше и эффективней.
Ниже пример процедуры:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dla].[schema_status]
AS
BEGIN

DECLARE @SESSION_ID AS BIGINT;
SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status);



INSERT INTO dla.schemastatus WITH (TABLOCK)
SELECT 
      @SESSION_ID SESSION_ID,
	  Schemaname Schemaname,
	  SizeInMB SIzeInMB,
	  GETDATE() date
	FROM(
	     SELECT  SCHEMA_NAME(so.schema_id) AS SchemaName
               ,SUM(ps.reserved_page_count) * 8.0 / 1024 AS SizeInMB
        FROM    sys.dm_db_partition_stats ps
        JOIN    sys.indexes i
          ON    i.object_id                                     =           ps.object_id
         AND    i.index_id                                      =           ps.index_id
             JOIN   sys.objects  so
               ON   i.object_id                                                              =                   so.object_id
       WHERE    so.type                                                                       =                   'U'
    GROUP BY so.schema_id
    ---ORDER BY OBJECT_SCHEMA_NAME(so.schema_id), SizeInMB
...
Рейтинг: 0 / 0
Создание генерируемого айдишника
    #39761003
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежели твоя процедура ОДНА и выполняется раз в сутки без конкуренции - пофиг как ты будешь генерировать SESSION_ID.
...
Рейтинг: 0 / 0
Создание генерируемого айдишника
    #39761747
Mike_za
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как на счет нормализации? Дата — это свойство сессии?
...
Рейтинг: 0 / 0
Создание генерируемого айдишника
    #39762164
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
plorkieПодскажите, как лучше и эффективней.
Ниже пример процедуры:

Код: sql
1.
2.
DECLARE @SESSION_ID AS BIGINT;
SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status);





Как по мне, то как приведено в примере - так делать не надо. В твоей ситуации надо либо определять поле SESSION_ID как identity либо, если версия SQL 2012 и выше, использовать sequence. В любом случае это лучше чем постоянно дергать таблицу. Кстати, а сбор статистики изменений с какой частотой работать будет? Раз в день? А если попросят тебя динамику в пиковые часы и в часы минимальной нагрузки на протяжении недели показать и сравнить то сбор статистики раз в день не поможет, чаще придется собирать.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание генерируемого айдишника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]