Отчет прайс-лист (некорректно выводит данные)

Если клиент давний, то необходимо добавить новый отчет по прайсу (есть 2 варианта сплошной и каждая группа с новой строки). А также выполнить скрипт (открыв для этого SQL Server и сделав предварительно резервную копию базы)

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[get_services_list] (
 @GroupId dbo.DT_ID
 )
 RETURNS
 @price_list_table table (GroupCode varchar(200), GroupName varchar(500),
 GroupId integer,
 ServiceCode varchar(200), ServiceName varchar (500), BaseCost money,
 ServiceId integer)
 AS
 BEGIN
 --INSERT INTO @price_list_table(GroupId) VALUES (-555);

IF ((SELECT COUNT(ID) FROM SERVICES WHERE ENABLED = 1 AND GROUPID = @GroupId) > 0)
 BEGIN
 INSERT INTO @price_list_table(GroupCode, GroupName, GroupId, ServiceCode, ServiceName, BaseCost, ServiceId)
 SELECT gs.code, gs.name, gs.id, s.code, s.name, s.basecost, s.id
 FROM groupservices gs
 LEFT JOIN services s ON s.groupid = gs.id
 WHERE gs.enabled = 1
 AND s.enabled = 1
 AND gs.ID = @GroupId
 ORDER BY s.CODE
 END;

IF ((SELECT COUNT(ID) FROM groupservices WHERE ENABLED = 1 AND OWNER = @GroupId) > 0)
 BEGIN
 declare @xGroupId dbo.DT_ID;
 declare group_list cursor local forward_only static
 for select gs.id
 from GROUPSERVICES gs
 where gs.ENABLED = 1 AND gs.OWNER = @GroupId
 order by gs.ID

open group_list;

fetch next from group_list into @xGroupId;

while @@FETCH_STATUS = 0
 begin
 INSERT INTO @price_list_table(GroupCode, GroupName, GroupId, ServiceCode, ServiceName, BaseCost, ServiceId)
 SELECT * FROM dbo.get_services_list(@xGroupId)

fetch next from group_list into @xGroupId;
 --if (@xGroupId > 17)
 -- break
 end;

CLOSE group_list
 DEALLOCATE group_list
 END;
 RETURN;
 END

GO

Зависание ArchiMed

ЗАВИСАНИЯ СИСТЕМЫ

Бывают ситуации когда при длительно работе в системе Archimed+ начинаются проблемы с долгим выполнением тех или иных действий/запросов

Есть несколько процедур, которые необходимо производить над базой, с целью оптимизации работы:

1. Перестройка индексов в самых загруженных таблицах

Для начала можно выполнить следующий запрос:

SELECT a.index_id, name, avg_fragmentation_in_percent
 FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(N'ИМЯ ТАБЛИЦЫ'),
 NULL, NULL, NULL) AS a
 JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;

В результате мы увидим в % общую фрагментацию. Если процент высокий, то можно сделать перестроение индексов

Для этого:

  • Запускаем Среду Microsoft SQL Managment Studio
  • Выбираем нужную таблицу
  • Разворачиваем ее
  • Правой кнопкой Индексы
  • Перестроить индексы — OK

индексы

В результате размер общей фрагментации должен значительно уменьшится

2. Обновление статистик

Необходимо также в Среде Microsoft SQL Managment Studio  выполнить следующий скрипт

exec sp_MSforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'

обновление статистик

3. Очистка КЭШа

Необходимо также в Среде Microsoft SQL Managment Studio  выполнить следующий скрипт

DBCC FREEPROCCACHE

очистка кэш