4

我链接到一个 Proficy Historian,它允许在列名中使用句点。因为数据是以非 DBMS 格式存储的,所以我不能openquery用来获取数据,因为表没有设置模式。所以我必须使用四部分名称语法来获取数据。这个例子有效:

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

(编辑以反映新知识,如果你喜欢这个投票给马丁史密斯的答案!)

通过将它们加倍来逃避]

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 回答