【问题标题】:Incorrect Syntax near '-', in SQL query and parameterSQL 查询和参数中“-”附近的语法不正确
【发布时间】:2018-02-20 06:58:33
【问题描述】:

如果我在cmd.Parameters.Add 中的参数@Time-in@Time-out 中添加一个括号,则会出现错误

日期时间附近的语法不正确。

但是如果没有括号,就会报错

'-' 附近的语法不正确

cmd.CommandText = "UPDATE [q].[dbo].[d] set 
    Name=@Name," & "[Reserve_date]=
    [@Reserve_date],Room=@Room,[Time-in]=[@Time-in],[Time-
    out]=[@Time-out] where ID=@ID;"

cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(SID)
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = sName
cmd.Parameters.Add("@Reserve_date", SqlDbType.DateTime).Value = sDate
cmd.Parameters.Add("@Room", SqlDbType.VarChar).Value = sRoom
cmd.Parameters.Add("@Time-in", SqlDbType.DateTime).Value = sStart
cmd.Parameters.Add("@Time-out", SqlDbType.DateTime).Value = sEnd

【问题讨论】:

  • 您的参数不能用括号括起来[@Reserve_date][@Time-in][@Time-out]
  • " & "@第二行代码是什么意思?
  • "&" 使用是因为我的 vs , 是自动换行
  • 但如果它没有用括号括起来,我得到一个错误 Incorrect Syntax near '-'
  • 停止不良做法。避免在 tsql 标识符中使用特殊字符。不要在没有非常好的理由且仅在您了解其含义的情况下在应用程序的 tsql 语句中使用 3 或 4 部分对象名称。您的连接字符串应正确设置,以便为您使用的服务器实例和数据库提供适当的上下文。将数据库名称添加到表引用中只会在您更改连接字符串时导致问题(突然发现您的应用程序不再正常工作)。

标签: sql-server vb.net tsql syntax-error


【解决方案1】:

连字符 - 不是 sql-server 参数名称的有效字符。
例如将其删除或更改为下划线_

摘自TechNet

Microsoft SQL Server 无法识别变量名并存储 定界的过程参数。这些类型的标识符 必须遵守常规标识符的规则。

关于标识符的更多信息可以在这里找到:

【讨论】:

    【解决方案2】:

    你不能这样命名变量:

    第一个字符必须是以下之一:

    Unicode 标准 3.2 定义的字母。统一码 字母的定义包括从 a 到 z 的拉丁字符,从 A 到 Z,以及其他语言的字母字符。

    下划线 (_)、at 符号 (@) 或数字符号 (#)。 ...

    后续字符可以包括以下内容:

    Unicode 标准 3.2 中定义的字母。

    来自基本拉丁文或其他国家文字的十进制数字。

    at 符号、美元符号 ($)、数字符号或下划线。

    详情请见: msdn: db identifiers rules

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 2017-02-26
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      相关资源
      最近更新 更多