2010-07-19 75 views
4

我链接到允许在列名称中显示句点的Proficy Historian。因为数据是以非DBMS格式存储的,所以我无法使用openquery来获取数据,因为没有设置表的架构。所以我必须使用四部分名称语法来获取数据。此示例的工作原理如下:在列名称中选择带有句点的列SQL Server

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其中是列

的名称,这个失败以及与“从”关键字附近不正确的语法。

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

任何关于如何让SQL Server可以将此列视为列的想法?

编辑:

右括号

马丁斯建议逃脱耳只对SQL调用

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

的外出打工然而,它没有内部不正确的语法关键字附近工作'从'。

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] 

我不得不逃离列逃生:)

回答

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 
+0

如果我用'declare @t table([[[a]]] int)从@ t'选择[[a]]]来测试它,它会给出一个错误。除了'select [[[a]]]' – Andomar 2010-07-19 21:14:42

+0

@Andomar之外,基本上任何其他组合都一样 - 我刚发布的代码是否适合您? – 2010-07-19 21:15:55

+1

+1是的,'select * from syscolumns where id = OBJECT_ID(...)'确认我的列名'[[[a]]]'真的名为'[[a]'。接得好! – Andomar 2010-07-19 21:19:46

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 
+0

'不正确的语法关键字附近'from'.' 似乎t o放大sql调用,在那里有很多括号。不同的错误,但。通常,来自括号中ihTrend的SELECT [SERVER.pid_astatus [07] [0] .F_CV.Value]命令全是黑色的,没有语法突出显示,但是当我按照你的建议做了语法突出显示时,到命令的末尾 – efbenson 2010-07-19 21:05:26