AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.05.2013, 18:02   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Подсчет записей в ax2012 с учетом DataArea и Partition. Как лучше?
Работаю с демоданными. В том числе выполнил анализ числа записей с учетом раздела и компании.

Получился вот SQL-скрипт, который привел ниже.

Уверен, что скрипт можно улучшить
Например, хочется, чтобы он выполнялся в один проход (хотя и не уверен, что это будет быстрее и эффективнее)
Также хочется, чтобы можно было задать фильтр по именам таблиц (пока не придумал, как его включить по человечески)

Как можно улучшить этот скрипт?

Код:
--
-- Подсчитывает число записей в базе данных Dynamics AX 2012 в разрезе Partition, DataArea
-- версия 1.0, mazzy
-- 

-- Фильтр на названия таблиц (в текущей версии не используется)
DECLARE @filter NVARCHAR(255)
-- Варианты фильтров:
-- SET @filter = '' -- по умолчанию считать число записей во всех таблицах.
-- SET @filter = 'and o.name like ''a%'''
-- SET @filter = 'and o.name like ''%retail%'''
-- SET @filter = 'and o.name like ''%trans%'''

-- добавляем пробел, чтобы можно было подключать и другие условия
IF( LEN(@filter) > 0 and RIGHT(@filter,1) <> ' ')
	set @filter += ' '

-- временная таблица, для хранения результатов
DECLARE @tblTemp TABLE(NAME nvarchar(255), Row_Count int, PARTITION nvarchar(255), DATAAREA nvarchar(255))

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), PARTITIONS.NAME, DATAAREAID
			FROM ? JOIN PARTITIONS on (PARTITIONS.RECID = ?.PARTITION)
			group by PARTITIONS.NAME, DATAAREAID',
	@whereand = 'and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), PARTITIONS.NAME, NULL
			FROM ? JOIN PARTITIONS on (PARTITIONS.RECID = ?.PARTITION)
			group by PARTITIONS.NAME',
	@whereand = 'and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), NULL, DATAAREAID
			FROM ?
			group by DATAAREAID',
	@whereand = 'and 0 <> (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

INSERT INTO @tblTemp
 EXEC sp_msforeachtable
	@command1 = 'SELECT ''?'', COUNT(0), NULL, NULL
			FROM ?',
	@whereand = 'and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''DATAAREAID'')
			and 0 =  (select count(*) from sys.columns as c where c.object_id = o.id and c.name = ''PARTITION'')'

SELECT * FROM @tblTemp
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[ANN] Tabax 0.1 -- панель задач для Axapta belugin DAX: База знаний и проекты 302 21.10.2016 12:49
Axilicious:AX2012 R2 : DB Sync – Failed to create a session Blog bot DAX Blogs 0 27.02.2013 21:11
axaptacorner: Data partition in Ax 2012 R2 Blog bot DAX Blogs 0 21.01.2013 21:11
Выборка произвольных записей одним запросом db DAX: Программирование 1 23.09.2010 14:15
Домены и select * from DataArea Yprit DAX: Программирование 1 11.04.2008 16:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:54.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.