4

私は、列名にピリオドを許可する Proficy Historian にリンクしています。データは DBMS 以外の形式で格納されているopenqueryため、テーブルにスキーマが設定されていないため、データの取得に使用できません。したがって、データを取得するには、4 つの部分からなる名前の構文を使用する必要があります。この例は機能します:

SELECT * FROM iHist...[SELECT * FROM ihTrend]

しかし、これは'.' の近くの不正な構文で失敗します。

SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07][0].F_CV.Value] FROM ihTrend]

SERVER.pid_astatus[07][0].F_CV.Value列の名前はどこですか

これは、キーワード「from」の近くの構文が正しくない場合にも失敗します。

SELECT * FROM 
    iHist...[SELECT [SERVER.pid_astatus[[07]][[0]].F_CV.Value] from ihTrend]`

SQL Server にこれを列として表示させる方法についてのアイデアはありますか?

編集:

括弧をエスケープするための右括弧のMartinsの提案は、SQL呼び出しの外側でのみ機能します

SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM iHist...[SELECT * FROM ihTrend] 

ただし、キーワード「from」の近くの不正な構文内では機能しません。

SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM ihTrend]

編集

SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value]] FROM ihTrend] 

列エスケープをエスケープする必要がありました:)

4

2 に答える 2

6

これらをエスケープするだけです]

[pid_astatus[07]][0]].F_CV.Value]

これは私のために働く

CREATE TABLE #t(
    [pid_astatus[07]][0]].F_CV.Value] int
) 

SELECT [pid_astatus[07]][0]].F_CV.Value]
FROM #t
于 2010-07-19T21:10:50.547 に答える
4

(Martin Smith の回答に対するこの投票が気に入った場合は、新しい知識を反映するように編集されています!)

]それらを2倍にしてエスケープします:

SELECT * FROM 
    iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] from ihTrend]

あなたのコメントに基づいて、試してください:

SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM iHist...ihTrend
于 2010-07-19T20:52:36.607 に答える