【问题标题】:Forbidden schema names : SYS, DBO (MsSQL)禁止的架构名称:SYS、DBO (MsSQL)
【发布时间】:2018-12-27 13:35:25
【问题描述】:

真是一个愚蠢的问题,但找不到官方参考

除了 [sys] 和 [dbo] 之外,还有哪些模式名称对 sql devps 不可用?

(当然,适用良好做法,没有点、空格和破折号)

【问题讨论】:

  • 真的吗?对此投了反对票??
  • 不是一个愚蠢的问题。只是一个基本的,我们都必须在某个时候学习基础知识。

标签: sql-server azure sql-server-2008 database-design azure-sql-database


【解决方案1】:

不能使用 SQL 附带的架构。这些可以从master 数据库中列出(如果没有添加用户模式):

SELECT name FROM master.sys.schemas;

结果:

dbo
guest
INFORMATION_SCHEMA
sys
db_owner
db_accessadmin
db_securityadmin
db_ddladmin
db_backupoperator
db_datareader
db_datawriter
db_denydatareader
db_denydatawriter

最佳做法是在命名架构、表、列等时遵循rules for regular identifiers。以下是文档摘录:

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

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

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

标识符开头的某些符号在 SQL Server 中具有特殊含义。以 at 符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号 (##) 开头的标识符表示全局临时对象。尽管可以使用数字符号或双数字符号字符来开始其他类型对象的名称,但我们不推荐这种做法。 某些 Transact-SQL 函数的名称以双 at 符号 (@@) 开头。为避免与这些函数混淆,您不应使用以@@ 开头的名称。

  • 后续字符可以包括以下内容: Unicode 标准 3.2 中定义的字母。 来自基本拉丁文或其他国家文字的十进制数字。 at 符号、美元符号 ($)、数字符号或下划线。

  • 标识符不能是 Transact-SQL 保留字。 SQL Server 保留保留字的大写和小写版本。在 Transact-SQL 语句中使用标识符时,不符合这些规则的标识符必须用双引号或括号分隔。保留的字取决于数据库兼容级别。可以使用 ALTER DATABASE 语句设置此级别。

  • 不允许嵌入空格或特殊字符。

  • 不允许使用补充字符。

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 2011-06-17
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多