проверено на SQL 2005 standart
Выполнено ввиде процедуры для более удобного использования в периодическом задании
Code
USE [bn_patp_dob] -- имя вышей базы данных
GO
/****** Object: StoredProcedure [dbo].[CF_group_with_AnalogSensor] Script Date: 07/04/2012 19:00:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Бондарь Михаил>
-- Create date: 12/08/2011
-- Description: Отправка инфо об отсуствии данных по ТС
-- =============================================
Create PROCEDURE [dbo].[CF_group_with_AnalogSensor]
(@group_name varchar(255)='ДУТ: Есть аналоговые датчики')
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
/*
версия от 02-07-2012
заполняется состав группы спиком ТС с аналоговыми датчиками
*/
declare @group_id int
select top 1 @group_id=ObjectGroupeID from bn.dbo.FLEET_ObjectGroupe
where ObjectGroupeName=@group_name
if @group_id is null begin
INSERT INTO [BN].[dbo].[FLEET_ObjectGroupe]
([ObjectGroupeName]
,[ObjectGroupeDiscription]
,[Spec]
,[ImageFilename])
VALUES
(@group_name
,'Автогруппа - есть аналоговые датчики'
,0
,'')
set @group_id=@@IDENTITY
end
delete from bn.dbo.FLEET_ObjectRelation WHERE [ObjectGroupeID]=@group_id;
insert into bn.dbo.FLEET_ObjectRelation
([ObjectID]
,[ObjectGroupeID]
,[OrderBy])
select DISTINCT O.ObjectID, @group_id,null
FROM [BN].[dbo].[SYS_DEV_Sensor] as S
inner join [BN].dbo.SYS_DEV_Device as D on d.id=s.device_id
inner join bn.dbo.FLEET_Object as O on o.Device_ID=d.id
where [sensor_type_id]=0 and [SensorActive]=1 and o.ObjectActive=1
END
использование
Code
DECLARE @RC int
DECLARE @group_name varchar(255)
-- TODO: задайте здесь значения параметров.
EXECUTE @RC = [bn_patp_dob].[dbo].[CF_group_with_AnalogSensor]
@group_name='Имя группы для заполнения'
GO
В процедуру передается имя группы - если группа с именем не найдена, то она будет создана автоматически
Замените bn_patp_dob на вашу базу данных (или создайте базу данных с этим именем).
У меня запуск происходит каждый час в рабочее время.