【问题标题】:Incorrect Syntax near '-' .(Microsoft SQL Server Native Client 10.0) [closed]'-' 附近的语法不正确。(Microsoft SQL Server Native Client 10.0)[关闭]
【发布时间】:2014-10-10 19:15:45
【问题描述】:

在执行 SSIS 工作时,我在创建表查询中遇到错误

'-' 附近的语法不正确。(Microsoft SQL Server Native Client 10.0)

SQL 语句:

CREATE TABLE Staging_ACD_Precision_Queue 
(
    PrecisionQueueID int,
    BucketIntervalID int,
    EnterpriseName varchar(32),
    AgentOrdering int,
    CallOrdering int,
    Description varchar(255),
    ServiceLevelThreshold int,
    ServiceLevelType smallint,
    ForceExpandingQueue varchar(1),
    Deleted varchar(1),
    ChangeStamp int,
    Partner varchar(4),
    Center varchar(4),
    Partner-Center varchar(9),
    LOB varchar(4),
    Circle varchar(4),
    TypeOfBusiness varchar(4)
)

我尝试了上述查询。我从错误消息中猜想,问题出在Partner-Center varchar(9),但我未能修复此错误。由于我是 SSIS 和 SQL 查询的新手,我不知道如何解决这个问题。

【问题讨论】:

  • 你需要使用方括号:[Partner-Center]
  • 为什么不遵循其余字段的命名约定并将其命名为 PartnerCenter?
  • 你从哪里读到 SSIS 不允许它们?,这是错误的
  • 如果括号在 SSIS 中失败,我猜它会失败并显示不同的错误消息。对吗?
  • 老实说,我会努力完全不使用连字符 - 特别是因为您正在这里创建表格并且可能做任何您想做的事情。只需使用合作伙伴中心即可。

标签: sql sql-server ssis syntax-error


【解决方案1】:

您需要在Partner-Center 周围加上方括号,例如[Partner-Center]。字段名称中不允许嵌入空格或特殊字符,但您可以通过将字段名称放在方括号内来转义它们。

CREATE TABLE Staging_ACD_Precision_Queue (
    PrecisionQueueID int,
    BucketIntervalID int,
    EnterpriseName varchar(32),
    AgentOrdering int,
    CallOrdering int,
    Description varchar(255),
    ServiceLevelThreshold int,
    ServiceLevelType smallint,
    ForceExpandingQueue varchar(1),
    Deleted varchar(1),
    ChangeStamp int,
    Partner varchar(4),
    Center varchar(4),
    [Partner-Center] varchar(9),
    LOB varchar(4),
    Circle varchar(4),
    TypeOfBusiness varchar(4)
)

正如其他人在这里所说,我也建议您避免在字段名称中使用连字符,并使用Partner_CenterPartnerCenter 作为字段名称而不是Partner-Center

【讨论】:

  • +1,正确,您需要方括号[Partner-Center] varchar(9),但我建议您避免名称中包含任何特殊字符。我们的命名标准禁止使用任何特殊字符。另外,这列看起来很像前两列(Partner varchar(4), Center varchar(4)),这可能是冗余组合数据吗?没有通过我的气味测试。
  • @KM 我希望不会,因为它比 Partner 和 Center 的总长度少一个字符。
  • @Donal 可能是因为他们之间有一个- ;-)
【解决方案2】:

SQL Server 不允许在裸字段名称中使用 -。但是,您可以通过用方括号 ([]) 将字段名称括起来来“转义”它:

CREATE TABLE Staging_ACD_Precision_Queue (
    PrecisionQueueID int,
    BucketIntervalID int,
    EnterpriseName varchar(32),
    AgentOrdering int,
    CallOrdering int,
    Description varchar(255),
    ServiceLevelThreshold int,
    ServiceLevelType smallint,
    ForceExpandingQueue varchar(1),
    Deleted varchar(1),
    ChangeStamp int,
    Partner varchar(4),
    Center varchar(4),
    [Partner-Center] varchar(9),
    LOB varchar(4),
    Circle varchar(4),
    TypeOfBusiness varchar(4)
)

【讨论】:

  • 你能引用 SQL Server 2008 的这个信息吗(因为 OP 提到了 SNC 10.0?我只能找到 SQL Server 2016 的这个信息。
【解决方案3】:

列名中不能有“-”。你可以做下划线。但不是减号。

实际上你可以但是你必须在列名周围用 [ ] 来创建一个破折号,并且每次你想访问你都必须 [var]

改变

Partner-Center varchar(9),

成为

Partner_Center varchar(9),

[Partner-Center] varchar(9)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多