【问题标题】:SQL Server having a column issue in renaming [duplicate]SQL Server 在重命名时出现列问题[重复]
【发布时间】:2013-04-03 19:58:30
【问题描述】:

我有一个表格,在设计模式下,该列的列名周围有[square brackets]。这是什么来的?我似乎无法删除它,它会导致问题。

【问题讨论】:

  • 内容被您的组织阻止 原因:此 Websense 类别已过滤:个人网络存储和备份。网址:screencast.com/t/KQZAWzkt
  • 真的吗? [] 如何导致“问题”?他们造成了哪些“问题”?除非您使用 this language,其中 [ 是关键字。

标签: sql sql-server sql-server-2005 ssms


【解决方案1】:

您的列名使用reserved keyword。如果你不喜欢方括号,在很多情况下都需要它们,所以也许你应该考虑(a)使用非保留词(如 IsDefault)或(b)不使用设计器.也许两者兼而有之。

【讨论】:

  • 投反对票,愿意发表评论吗?
  • 我有一次在重命名表时遇到了这个问题。 Exec sp_rename '[schema].[tablename]', '[newTable]' 会导致这种情况。区别在于第一个是参考,第二个是定义。
  • @AaronBertrand 从概念上讲这是最好的答案,但为了解决眼前的问题,我添加了正确的语法来处理重命名作为答案。我以前遇到过这个问题并且需要它,所以我认为它可以帮助寻找相同答案的人。
【解决方案2】:

要去掉括号...

Exec sp_rename '[schema].[table].[[DEFAULT]]]', 'BetterColumnName', 'Column';

【讨论】:

  • +1 好点......但是,我在列名字段中单击右键并手动重命名它没有问题(如果我继续选择,我无法在没有括号的情况下保存它保留关键字,但如果我想要一个更合理的名称,我不需要明确使用sp_rename)。当然,我使用的是 SSMS 2012;也许以前的版本对此不太友好。
  • @AaronBertrand 啊,明白了,我从来没有使用过设计模式,所以我不知道这个限制。对象资源管理器和 sp_rename 将允许我将列名更改为不带括号的“DEFAULT”,但我明白你的意思。我所处的情况值得这个选项是重命名一个错误地重命名环境范围的表。我没有在 500 多个数据库上使用对象资源管理器,而是运行了一个部署脚本。 ;)
  • 是的,有道理。该工具的现代版本应该可以很好地处理 OP 的场景,但如果他们坚持使用保留关键字 8 年旧版本......
【解决方案3】:

在表格设计模式下,如果你给任何列名作为默认,它会自动被[]包围,因为默认是保留的关键字。您可以通过右键单击该行并删除它来删除它。

【讨论】:

    【解决方案4】:

    通常情况下,字段中包含特殊字符(如空格)。尝试只使用字符和/或数字,它应该会消失。

    【讨论】:

      【解决方案5】:

      不符合所有标识符规则的标识符必须在 Transact-SQL 语句中进行分隔。例如:

      SELECT *
      FROM [My Table]      --Identifier contains a space and uses a reserved keyword.
      WHERE [order] = 10   --Identifier is a reserved keyword.
      

      具体文档参考:MSDN:http://msdn.microsoft.com/en-US/library/ms175874%28v=SQL.90%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多