2010-07-19 72 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