2016-09-27 4 views
1

데이터베이스의 모두 태그에있는 WonderWare 내역 데이터베이스에서 데이터를 가져 오려고합니다. 이미 모든 태그를 포함하는 테이블이 있으므로 하위 태그를 사용하여 모든 태그 이름을 선택하고 싶습니다. 이 하위 쿼리에 오류가 발생했습니다.WonderWare의 하위 쿼리를 사용하여 모든 태그 선택

/****** 

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' 

내가 수신하고 오류는 다음과 같습니다 :

내 SQL 문 같아요

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') 
) 

답변

0

시도 :

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 
1

사학자 서버가 정상적인 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'