我鏈接到允許在列名稱中顯示句點的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