проверка правильности занесения тарировки
|
|
logoff | Дата: Вторник, 11.10.2011, 18:34 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| для среды MSDE Code /****** Сценарий для команды SelectTopNRows среды SSMS ******/ declare @t table (idsensor int, mintarval float) declare @MinValue_Real float ,@MaxValue_Real float ,@MinValue_Tar float ,@MaxValue_Tar float declare @lastMinValue_Real float ,@lastMaxValue_Real float ,@lastMinValue_Tar float ,@lastMaxValue_Tar float declare cur cursor local for select distinct idsensor from [BN].[dbo].[FLEET_AnalogTarirovka] declare @idsensor int open cur fetch next from cur into @idsensor while @@fetch_status=0 begin declare cur2 cursor local FORWARD_ONLY for select [MinValue_Real] ,[MaxValue_Real] ,[MinValue_Tar] ,[MaxValue_Tar] from [BN].[dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@idsensor order by [MinValue_Real] select @lastMinValue_Real=null,@lastMaxValue_Real=null,@lastMinValue_Tar=null,@lastMaxValue_Tar=null open cur2 fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar while @@fetch_status=0 begin if @lastMinValue_Real is not null begin if @lastMaxValue_Real<>@MinValue_Real or @lastMaxValue_Tar<>@MinValue_Tar begin insert into @t values (@idsensor,@MinValue_Real) print @idsensor print @lastMaxValue_Real print @MinValue_Real print @lastMaxValue_Tar print @MaxValue_Tar end end select @lastMinValue_Real=@MinValue_Real,@lastMaxValue_Real=@MaxValue_Real,@lastMinValue_Tar=@MinValue_Tar,@lastMaxValue_Tar=@MaxValue_Tar fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar end close cur2 deallocate cur2 fetch next from cur into @idsensor end close cur deallocate cur select s.sensoractive, mintarval as error_on_str_min_tar, d.code,o.ObjectGarNum,o.ObjectGosNum from @t as t inner join bn.dbo.SYS_DEV_Sensor as s on s.id=t.idsensor inner join bn.dbo.SYS_DEV_Device as d on d.id=s.device_id left join bn.dbo.FLEET_Object as O on O.Device_ID=d.id where d.deviceactive=1
Проверяется, что в тарировночной таблице нет пропусков, нет пересечений данных на выходе таблица с списком проблемных датчиков для проверки
|
|
| |
JS | Дата: Понедельник, 14.01.2013, 09:41 | Сообщение # 2 |
Москва
Группа: Проверенные
Сообщений: 33
Репутация: 2
Статус: Offline
| Зачёт, очень полезно! только имеет смысл в последней выборке добавить номер датчика(s.num), ибо сейчас несколько датчиков уже норма, и избавиться от удалённых датчиков(where d.deviceactive=1 and s.sensoractive =1), да и в самой выборке удалённые датчики не нужны .
|
|
| |
logoff | Дата: Понедельник, 14.01.2013, 10:05 | Сообщение # 3 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| согласен со всеми замечаниями. Можете привести текст исправленного скрипта?
|
|
| |
JS | Дата: Понедельник, 14.01.2013, 10:15 | Сообщение # 4 |
Москва
Группа: Проверенные
Сообщений: 33
Репутация: 2
Статус: Offline
| У меня получилось вот так, только колонки в конце перетасовал. Код declare @t table (idsensor int, mintarval float) declare @MinValue_Real float ,@MaxValue_Real float ,@MinValue_Tar float ,@MaxValue_Tar float declare @lastMinValue_Real float ,@lastMaxValue_Real float ,@lastMinValue_Tar float ,@lastMaxValue_Tar float declare cur cursor local for select distinct idsensor from [BN].[dbo].[FLEET_AnalogTarirovka] declare @idsensor int open cur fetch next from cur into @idsensor while @@fetch_status=0 begin declare cur2 cursor local FORWARD_ONLY for select [MinValue_Real] ,[MaxValue_Real] ,[MinValue_Tar] ,[MaxValue_Tar] from [BN].[dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@idsensor order by [MinValue_Real] select @lastMinValue_Real=null,@lastMaxValue_Real=null,@lastMinValue_Tar=null,@lastMaxValue_Tar=null open cur2 fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar while @@fetch_status=0 begin if @lastMinValue_Real is not null begin if @lastMaxValue_Real<>@MinValue_Real or @lastMaxValue_Tar<>@MinValue_Tar begin insert into @t values (@idsensor,@MinValue_Real) print @idsensor print @lastMaxValue_Real print @MinValue_Real print @lastMaxValue_Tar print @MaxValue_Tar end end select @lastMinValue_Real=@MinValue_Real,@lastMaxValue_Real=@MaxValue_Real,@lastMinValue_Tar=@MinValue_Tar,@lastMaxValue_Tar=@MaxValue_Tar fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar end close cur2 deallocate cur2 fetch next from cur into @idsensor end close cur deallocate cur select d.code as 'Номер АТ', s.num as 'Номер Датчика', mintarval as 'Значение датчика с ошибкой ', o.ObjectGarNum'Гаражный номер',o.ObjectGosNum as 'Гос номер' from @t as t inner join bn.dbo.SYS_DEV_Sensor as s on s.id=t.idsensor inner join bn.dbo.SYS_DEV_Device as d on d.id=s.device_id left join bn.dbo.FLEET_Object as O on O.Device_ID=d.id where d.deviceactive=1 and s.sensoractive =1
|
|
| |
logoff | Дата: Понедельник, 14.01.2013, 10:20 | Сообщение # 5 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Спасибо!
|
|
| |