Сначала сделаем 1 таблицу. Эта таблица будет темповая.
GO /****** Object: Table [dbo].[zakupki] Script Date: 05/11/2016 16:18:14 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[zakupki]( [SchedDate] [datetime] NOT NULL, [Type_in_schedule] [varchar](16) NOT NULL, [рассчитано] [int] NULL, [колво строк рассчитано] [int] NULL, [кол-во заявок] [int] NULL, [колво строк] [int] NULL, [заявки с автоутверждением] [int] NULL, [колво строк автоутвержд.] [int] NULL, [не расчитаные строки] AS [колво строк] - [колво строк рассчитано], [не расчитаные заявки] AS [кол-во заявок] - [рассчитано] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Создадим вторую таблицу. Эта таблица будет архивная
GO /****** Object: Table [dbo].[zakupki_arhiv] Script Date: 05/11/2016 16:18:14 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[zakupki]( [SchedDate] [datetime] NOT NULL, [Type_in_schedule] [varchar](16) NOT NULL, [рассчитано] [int] NULL, [колво строк рассчитано] [int] NULL, [кол-во заявок] [int] NULL, [колво строк] [int] NULL, [заявки с автоутверждением] [int] NULL, [колво строк автоутвержд.] [int] NULL, [не расчитаные строки] AS [колво строк] - [колво строк рассчитано], [не расчитаные заявки] AS [кол-во заявок] - [рассчитано] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Теперь сделаем задание которое будет наполнять таблицу zakupki в 8 утра.
DELETE FROM s0055.rkur_dbastat.dbo.zakupki; GO DROP TABLE #t ;with cte as (select v.RCONTRACTACCOUNT ,v.PURCHASEPATTERNID ,count(*) as 'count' from ax_molniya.RFD.VENDCONTRACTITEMVIEW v inner join ax_molniya.[RFD].[PURCHASEPATTERNview] p on v.RCONTRACTACCOUNT = p.RCONTRACTACCOUNT and v.PURCHASEPATTERNID = p.PURCHASEPATTERNID where AUTOORDER = 1 GROUP by v.RCONTRACTACCOUNT ,v.PURCHASEPATTERNID) select vds.SchedDate , Type_in_schedule = case pp.UseForShop when 0 then 'ЦАУ' when 1 then 'Магазин' else 'ЦАУ, без шаблона' end , sum(vds.ISCALC) as 'рассчитано' , sum(case when vds.ISCALC = 1 then cte.count else 0 end) as 'колво строк рассчитано' , count(*) as 'кол-во заявок' , sum(cte.count) as [колво строк] , sum(vo.AUTOCREATEPURCHORDER) as [заявки с автоутверждением] , sum(case when vo.AUTOCREATEPURCHORDER = 1 then cte.count else 0 end) as [колво строк автоутвержд.] INTO #t from ax_molniya.[RFD].[VENDDELIVERYSCHEDULEview] vds left join ax_molniya.[RFD].[PURCHASEPATTERNview] pp on pp.RContractAccount = vds.ContractNum and pp.PurchasePatternId = vds.PatternId left join ax_molniya.dbo.VendRequestOrderTable vo on vo.REQUESTORDERID = vds.ORDERID left join cte cte on cte.RCONTRACTACCOUNT = pp.RCONTRACTACCOUNT and cte.purchasepatternid = pp.PURCHASEPATTERNID where pp.UseForShop = 1 group by vds.SchedDate ,pp.UseForShop order by case pp.UseForShop when 0 then 'ЦАУ' when 1 then 'Магазин' else 'ЦАУ, без шаблона' end, vds.SchedDate , pp.UseForShop INSERT INTO s0055.rkur_dbastat.dbo.zakupki ([SchedDate] ,[Type_in_schedule] ,[рассчитано] ,[колво строк рассчитано] ,[кол-во заявок] ,[колво строк] ,[заявки с автоутверждением] ,[колво строк автоутвержд.]) SELECT [SchedDate] ,[Type_in_schedule] ,[рассчитано] ,[колво строк рассчитано] ,[кол-во заявок] ,[колво строк] ,[заявки с автоутверждением] ,[колво строк автоутвержд.] FROM #t ;
Теперь сделаем задание которое будет сливать данные в архив. И будет обновлять данные если они изменились в 1 таблице.
MERGE zakupki_arhiv trg -- таблица приемник USING zakupki src -- таблица источник ON trg.SchedDate=src.SchedDate -- условие слияния /* -- 1. Строка есть в trg но нет сопоставления со строкой из src WHEN NOT MATCHED BY SOURCE THEN DELETE */ -- 2. Есть сопоставление строки trg со строкой из источника src WHEN MATCHED THEN UPDATE SET trg.[колво строк] = src.[колво строк], trg.[кол-во заявок] = src.[кол-во заявок], trg.[заявки с автоутверждением] = src.[заявки с автоутверждением], trg.[колво строк автоутвержд.] = src.[колво строк автоутвержд.] -- 3. Строка не найдена в trg, но есть в src WHEN NOT MATCHED BY TARGET THEN -- предложение BY TARGET можно отпускать, т.е. NOT MATCHED = NOT MATCHED BY TARGET INSERT(SchedDate,Type_in_schedule,[рассчитано],[колво строк рассчитано],[кол-во заявок],[колво строк],[заявки с автоутверждением],[колво строк автоутвержд.]) VALUES(src.SchedDate,src.Type_in_schedule,src.[рассчитано],src.[колво строк рассчитано],src.[кол-во заявок],src.[колво строк],src.[заявки с автоутверждением],[колво строк автоутвержд.]); GO UPDATE dbo.zakupki_arhiv SET [рассчитано] = (SELECT [рассчитано] FROM dbo.zakupki where CONVERT(VARCHAR(20),SchedDate,5) = (select CONVERT (date, SYSDATETIME()))), [колво строк рассчитано] = (SELECT [колво строк рассчитано] FROM dbo.zakupki where CONVERT(VARCHAR(20),SchedDate,5) = (select CONVERT (date, SYSDATETIME()))) where CONVERT(VARCHAR(20),SchedDate,5) = (select CONVERT (date, SYSDATETIME()))
Добавим сенсор для мониторинга и отправки смс.
/****** Сценарий для команды SelectTopNRows среды SSMS ******/ SELECT TOP 1 --CONVERT(CHAR(20),SchedDate,110) AS SchedDate /* [SchedDate] [Type_in_schedule] ,[рассчитано] ,[колво строк рассчитано] ,[кол-во заявок] ,[колво строк] ,[заявки с автоутверждением] ,[колво строк автоутвержд.] ,[не расчитаные строки] */ [не расчитаные заявки] FROM [rkur_dbastat].[dbo].[zakupki] WHERE CONVERT(VARCHAR(20),SchedDate,5) = (select CONVERT (date, SYSDATETIME()))
Сам сенсор в prtg
И создан календарь zakupki что бы датчик работал только с 8 до 9 утра.
Similar Posts:
- Как сделать хранимую процедуру для мониторинга заданий в MSSQL через prtg.
- Как сделать проверку выполнения задания. версия 2
- Как создать хранимую процедуру для мониторинга заданий (job) в MSSQL. Хранимая процедура для PRTG
- Как узнать какие запросы грузят CPU процессор.
- Как сделать проверку выполнения задания. Мониторит запущено ли задание или нет на удаленном сервере.