【问题标题】:Where is the Invalid syntax near the comma in this TSQL?此 TSQL 中逗号附近的无效语法在哪里?
【发布时间】:2016-01-14 23:04:43
【问题描述】:

我没有从查询中返回结果。起初我认为这只是一个错误的查询 - 不应该返回任何数据,但现在看来它可能是导致问题的语法错误。

在 Visual Studio 的服务器资源管理器中运行存储过程(查询是其中的一部分)时,我从第一个查询中获取数据,但是这个(更新)不返回任何数据(没有错误消息,但也没有数据)。然而,当我尝试在 LINQPad 中仅运行存储过程的这一部分时,到处都是程序员的挚友声称它发现了令人生畏的“错误 102:',' 附近的语法不正确。 "

它指向这条线:

and ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE')),'X')

...(唯一带有','的行),但我不明白问题出在哪里。我还尝试了这个主题的变化:

and ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE'),'X'))

...但是错误的消息是一样的。

这是我在 LINQPad 中尝试的整个查询:

isnull((Select top 1 ItemCode 
From PlatypusUnitMapping 
where Unit='BIG RED ONE' 
and MemberNo='42' 
and MemberItemCode= '314IMPie'
and ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE')),'X')

那么这有什么问题呢?更简单的查询版本有效:

Select top 1 ItemCode 
From PlatypusUnitMapping 
where Unit='BIG RED ONE' 
and MemberNo='42' 
and MemberItemCode= '314IMPie' 
and ItemCode in 
(Select ItemCode from UnitProducts where Unit='BIG RED ONE')

...但我需要“isNull”爵士乐来进行后续查询。什么语法无效,我怎样才能使它有效/修复它?

更新

在 NMM 的推动下,我也尝试了这个:

and (ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE'))),'X')

...但无济于事。

【问题讨论】:

  • “这是我在 LINQPad 中尝试的整个查询:”但这不是一个完整的查询。在任何情况下,您粘贴的部分都有一个悬空的 WHERE 子句:Where NHItemCode='X'
  • 是的,我已经 86 岁了;这是糟糕的juju。

标签: tsql stored-procedures linqpad isnull


【解决方案1】:
and (ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE') 
OR ItemCode = 'X')

【讨论】:

  • 这不是我需要的“或”,而是在查询对象为空时返回的值。但是,您可能需要在“and”和“ItemCode”之间添加一个括号...
  • 哦,对不起,这个 OR :D 你不能用 isnull 启动程序 Select isnull((Select top 1 ItemCode From PlatypusUnitMapping where Unit='BIG RED ONE' and MemberNo='42' and MemberItemCode= '314IMPie' and ItemCode in (Select ItemCode from UnitProducts where Unit='BIG RED ONE')),'X') 会好的,但我不确定你想要最后一个 Where NHItemCode='X
【解决方案2】:

这与 Where NHItemCode='X' 有什么关系。错误代码就在附近,我发现为您提供了错误所在的一般区域。大多数时候,当我得到这个时,我有一个 ) 不合适的地方,但是 Where NHItemCode='X' 看起来不合适。你能把那行注释掉,看看会发生什么吗?解决此问题的另一种方法是在没有 is null 和没有 in 子句的情况下开始。然后添加 in 子句再次运行,然后最后但并非最不重要的添加 is null 。

【讨论】:

  • 是的,“Where NHItemCode='X'”子句是错误的,我删除了它;不过(在 LINQPad 中)仍然会出现错误。
【解决方案3】:

以下工作,应该在您的 SQL Server 上运行...与您的查询进行比较,看看缺少什么:

SELECT 
    ISNULL((
        SELECT TOP 1
          TABLE_CATALOG
        FROM
            INFORMATION_SCHEMA.COLUMNS
        WHERE
            TABLE_SCHEMA='dbo' AND
            COLUMN_DEFAULT IS NULL AND
            IS_NULLABLE='NO' AND
            DATA_TYPE IN (SELECT DISTINCT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE<>'numeric')
    ),'NONE')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2018-12-11
    • 2019-06-02
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多