Часто возникает необходимость выгружать данные для каких либо внешних систем ... впринципе есть много разных способов это сделать ...
Ниже я приведу SQL запрос кторый читает список тегов из одной таблицы и по этому списку читает среднее за пол часа из Historian. Чтение сделано курсором .. не самый эфективный вариант с точки зрения производительности но если нужно выгружать не много и не часто то пойдет. А если нет то можно оптимизировать, но это уже отдельный вопрос :)
если кому тема интересна но непонятна ... пишите, прокоментирую :)
SET NOCOUNT ON
DECLARE @StartDate DateTime;
DECLARE @EndDate DateTime;
SET @StartDate = convert(nvarchar, (SELECT ISNULL(Max([DateTime]),DateAdd(HH,-24,GetDate())) FROM testExportDB.dbo.data ), 21);
SET @EndDate = GetDate()
SET NOCOUNT OFF
select @StartDate,@EndDate
DECLARE @TagName nvarchar(256);
DECLARE tags_cursor CURSOR LOCAL FOR
SELECT TagName
FROM testExportDB.dbo.Tags
WHERE (ScheduleNumber = 1);
OPEN tags_cursor
FETCH NEXT FROM tags_cursor INTO @TagName;
WHILE @@FETCH_STATUS = 0
BEGIN
--INSERT INTO testExportDB.dbo.data
SELECT temp.TagName ,Description ,DateTime ,Value ,Unit = ISNULL(Cast(EngineeringUnit.Unit as VarChar(20)),'N/A') ,QualityString From (
SELECT *
FROM Runtime.dbo.History
WHERE History.TagName IN (@TagName)
AND wwRetrievalMode = 'Average'
AND wwResolution = 1800000
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp
LEFT JOIN Runtime.dbo.Tag ON Tag.TagName =temp.TagName
LEFT JOIN Runtime.dbo.AnalogTag ON AnalogTag.TagName =temp.TagName
LEFT JOIN Runtime.dbo.EngineeringUnit ON AnalogTag.EUKey = EngineeringUnit.EUKey
LEFT JOIN Runtime.dbo.QualityMap ON QualityMap.QualityDetail = temp.QualityDetail
WHERE temp.StartDateTime >= @StartDate
FETCH NEXT FROM tags_cursor INTO @TagName
END
CLOSE tags_cursor
DEALLOCATE tags_cursor
а вот этот запрос выгружает таблицу в CSV файл
DECLARE @FileCSV VARCHAR(100),
@Query VARCHAR(256),
@FileNameDT DateTime;
SET @FileNameDT = DateAdd(HH,-24,GetDate());
SET @FileCSV = 'c:\tmp\data' + convert(nvarchar, @FileNameDT, 112) + '-0000.csv'
SET @Query = 'SQLCMD -S . -d testExportDB -Q "SELECT * FROM testExportDB.dbo.data" -s "," -o ' + @FileCSV
EXEC xp_cmdshell @Query
Ниже я приведу SQL запрос кторый читает список тегов из одной таблицы и по этому списку читает среднее за пол часа из Historian. Чтение сделано курсором .. не самый эфективный вариант с точки зрения производительности но если нужно выгружать не много и не часто то пойдет. А если нет то можно оптимизировать, но это уже отдельный вопрос :)
если кому тема интересна но непонятна ... пишите, прокоментирую :)
SET NOCOUNT ON
DECLARE @StartDate DateTime;
DECLARE @EndDate DateTime;
SET @StartDate = convert(nvarchar, (SELECT ISNULL(Max([DateTime]),DateAdd(HH,-24,GetDate())) FROM testExportDB.dbo.data ), 21);
SET @EndDate = GetDate()
SET NOCOUNT OFF
select @StartDate,@EndDate
DECLARE @TagName nvarchar(256);
DECLARE tags_cursor CURSOR LOCAL FOR
SELECT TagName
FROM testExportDB.dbo.Tags
WHERE (ScheduleNumber = 1);
OPEN tags_cursor
FETCH NEXT FROM tags_cursor INTO @TagName;
WHILE @@FETCH_STATUS = 0
BEGIN
--INSERT INTO testExportDB.dbo.data
SELECT temp.TagName ,Description ,DateTime ,Value ,Unit = ISNULL(Cast(EngineeringUnit.Unit as VarChar(20)),'N/A') ,QualityString From (
SELECT *
FROM Runtime.dbo.History
WHERE History.TagName IN (@TagName)
AND wwRetrievalMode = 'Average'
AND wwResolution = 1800000
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp
LEFT JOIN Runtime.dbo.Tag ON Tag.TagName =temp.TagName
LEFT JOIN Runtime.dbo.AnalogTag ON AnalogTag.TagName =temp.TagName
LEFT JOIN Runtime.dbo.EngineeringUnit ON AnalogTag.EUKey = EngineeringUnit.EUKey
LEFT JOIN Runtime.dbo.QualityMap ON QualityMap.QualityDetail = temp.QualityDetail
WHERE temp.StartDateTime >= @StartDate
FETCH NEXT FROM tags_cursor INTO @TagName
END
CLOSE tags_cursor
DEALLOCATE tags_cursor
а вот этот запрос выгружает таблицу в CSV файл
DECLARE @FileCSV VARCHAR(100),
@Query VARCHAR(256),
@FileNameDT DateTime;
SET @FileNameDT = DateAdd(HH,-24,GetDate());
SET @FileCSV = 'c:\tmp\data' + convert(nvarchar, @FileNameDT, 112) + '-0000.csv'
SET @Query = 'SQLCMD -S . -d testExportDB -Q "SELECT * FROM testExportDB.dbo.data" -s "," -o ' + @FileCSV
EXEC xp_cmdshell @Query
а этот (прямо из мсдн скопировал)разрешает работу предидущего
-- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO
Sergei, podskazhite gde naity opisanie dlya
ОтветитьУдалитьvariantov primeneniya sleduushih paravetrov
v dbo.History view
--AND wwRetrievalMode = 'Cyclic'
AND wwRetrievalMode = 'Average'
AND wwResolution = 3600000
--AND wwCycleCount = 24
AND wwVersion = 'Latest'
Spasibo,
Peter
Historian Concepts Guide (HistorianConcepts.pdf) есть в дистрибутиве хисториана или на сайте Wonderware после регистрации
УдалитьData Retrieval Options (page 147)