Использование подзапроса в WonderWare для выбора всех тегов

Я пытаюсь получить данные из базы данных архива WonderWare по всем тегам в базе данных. Уже есть таблица, содержащая все теги, поэтому я хотел бы использовать подзапрос для выбора всех имен тегов. Я получаю сообщение об ошибке в этом подзапросе.

Моя инструкция sql:

/******

I want to be able to select:
    - all columns
    - for all tags <-- I'm getting an error here, trying to use a subquery
    - between two time stamps
    - at a specified resolution

******/

SELECT *
FROM
    Runtime.[dbo].AnalogHistory
WHERE
    TagName IN (
        SELECT DISTINCT TagName
        FROM
            Runtime.dbo.Tag
    )
AND
    DateTime >= '2016-01-01 00:00'
AND
    DateTime < '2016-01-01 00:30'
AND
    wwResolution = 5000
AND
    wwRetrievalMode = 'Average'
AND
    wwTimeStampRule = 'Start'

Ошибка, которую я получаю, следующая:

OLE DB provider "INSQL" for linked server "INSQL" returned message "History queries must contain at least one valid tagname".

Что, я думаю, означает, что он не выполняется должным образом.

Я также пытался использовать openquery, но затем получаю другие ошибки, связанные с тем, что подзапрос не может распознать информацию о схеме таблицы тегов:

OLE DB provider "INSQL" for linked server "INSQL" returned message "Failed to retrieve schema information for object 'Tag'".

Это был измененный отрывок:

TagName IN ( SELECT * FROM OPENQUERY(INSQL, 
    'SELECT DISTINCT TagName
    FROM
        Runtime.dbo.Tag')
)

person cbcoutinho    schedule 27.09.2016    source источник


Ответы (2)


Historian Server не является обычной базой данных SQL Server. Его исторические представления получают данные со связанного сервера INSQL. В INSQL есть несколько специальных правил, которые задокументированы в HistorianConcepts.pdf.

SELECT 
    *
FROM
    Runtime.dbo.Tag t
INNER REMOTE JOIN 
    Runtime.dbo.AnalogHistory h
ON 
    t.TagName = h.TagName
WHERE
    DateTime >= '2016-01-01 00:00'
AND
    DateTime < '2016-01-01 00:30'
AND
    wwResolution = 5000
AND
    wwRetrievalMode = 'Average'
AND
    wwTimeStampRule = 'Start'
person trailer    schedule 31.07.2017

Пытаться:

SELECT DISTINCT aa.TagName FROM (
 SELECT DateTime, TagName, Value
 FROM History
 WHERE DateTime >= '2016-01-01 00:00'
 AND DateTime <= '2016-01-01 00:30'
 AND wwResolution = 5000
 AND wwRetrievalMode = 'Average'
 AND wwTimeStampRule = 'Start'
) aa
person Taraz    schedule 18.02.2017