【问题标题】:Selecting a column with period in the column name SQL Server选择列名称中带有句点的列 SQL Server
【发布时间】:2010-07-19 20:45:00
【问题描述】:

我链接到一个 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] 

我不得不逃离列转义:)

【问题讨论】:

    标签: sql sql-server linked-server historian


    【解决方案1】:

    你只需要转义这些]

    [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
    

    【讨论】:

    • 如果我用declare @t table ([[[a]]] int) select [[a]]] from @t 测试它,它会给出一个错误。除了select [[[a]]] 之外,基本上任何其他组合都相同
    • +1 是的,select * from syscolumns where id = OBJECT_ID(...) 确认我的列名[[[a]]] 确实被命名为[[a]。好收获!
    • Martin 感谢到目前为止的帮助,但如上所述,它在 []s 的主体中不起作用。
    • @efbenson:您尝试过我回答的第二部分吗?您在[server].[db].[schema].[table] 的table 部分中使用子查询有点奇怪,我很惊讶它可以与select * 一起使用!
    • 带引号的标识符有效吗? “SERVER.pid_astatus[07][0].F_CV.Value”。啊刚刚也看到了Andomar的评论。我对链接服务器语法不够熟悉,无法对此发表评论。
    【解决方案2】:

    (已编辑以反映新知识,如果您喜欢此投票,请改为投票给 Martin Smith 的答案!)

    通过将] 加倍来逃避它们:

    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
    

    【讨论】:

    • Incorrect syntax near the keyword 'from'. 似乎炸毁了 sql 调用以在其中包含那么多括号。虽然不同的错误。通常括号中的命令SELECT [SERVER.pid_astatus[07][0].F_CV.Value] from ihTrend 是全黑的,没有语法高亮显示,但是在我按照您的建议进行操作之后,语法高亮显示从from 开始到命令的末尾
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2020-05-23
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多