【问题标题】:sql-server: Incorrect syntax near ','sql-server:“,”附近的语法不正确
【发布时间】:2017-11-03 12:20:59
【问题描述】:

我在执行以下查询时收到此语法错误。任何建议如何解决它?

编辑

查询是动态创建的,运行的查询大小>8000...

',' 附近的语法不正确。

SELECT TS.* , --comma added
       (SELECT CONVERT(DATETIME, [4501001], 103) AS 'AG_VISDATE.U1.[4501001]'
        FROM   form.AG_VISDATE
        WHERE  pid = TS.pid
               AND COALESCE(visid, '') = 'U1'),
       (SELECT [4501004] AS 'AG_VISDATE.U1.[4501004]'
        FROM   form.AG_VISDATE
        WHERE  pid = TS.pid
               AND COALESCE(visid, '') = 'U1') 

我在TS.* 之后添加了“,”,但现在我收到以下错误:

消息 102,级别 15,状态 1,行 1 ',' 附近的语法不正确。

消息 102,级别 15,状态 1,行 1 “TS”附近的语法不正确。

【问题讨论】:

  • 你确定这是整个查询吗?
  • 尝试在TS.* 之后添加逗号。子查询在执行时必须返回一个标量值。

标签: sql-server


【解决方案1】:

可能是皈依者。看来您想将日期转换为字符串。

DECLARE @test date = '2017-10-13'
SELECT CONVERT(char(10), @test, 103) AS 'AG_VISDATE.U1.[4501001]'

【讨论】:

    【解决方案2】:

    这些语句都不起作用

    (SELECT CONVERT(DATETIME, [4501001], 103) AS 'AG_VISDATE.U1.[4501001]'
            FROM   form.AG_VISDATE
            WHERE  pid = TS.pid
                   AND COALESCE(visid, '') = 'U1')
    
       (SELECT [4501004] AS 'AG_VISDATE.U1.[4501004]'
        FROM   form.AG_VISDATE
        WHERE  pid = TS.pid
               AND COALESCE(visid, '') = 'U1') 
    

    因为 WHERE 子句将失败,因为 TS 没有在任何地方定义

    两个语句可以重写为一个

    SELECT CONVERT(DATETIME, [4501001], 103) AS 'AG_VISDATE.U1.[4501001]',
           [4501004] AS 'AG_VISDATE.U1.[4501004]'
    FROM   form.AG_VISDATE
    WHERE  pid = <SOMETHING> AND
           COALESCE(visid, '') = 'U1'
    

    目前尚不清楚您要做什么。你最好包括你的架构、测试数据和你想要的输出

    【讨论】:

    • 抱歉,我的语句的语法有错误。请立即尝试
    • 还删除了我原来的 cmets,因为它们对您编辑的代码毫无意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2017-07-15
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多