我链接到允许在列名称中显示句点的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]
我不得不逃离列逃生:)
如果我用'declare @t table([[[a]]] int)从@ t'选择[[a]]]来测试它,它会给出一个错误。除了'select [[[a]]]' – Andomar 2010-07-19 21:14:42
@Andomar之外,基本上任何其他组合都一样 - 我刚发布的代码是否适合您? – 2010-07-19 21:15:55
+1是的,'select * from syscolumns where id = OBJECT_ID(...)'确认我的列名'[[[a]]]'真的名为'[[a]'。接得好! – Andomar 2010-07-19 21:19:46