【发布时间】:2019-06-04 17:53:03
【问题描述】:
SQL Server 对象(即表和索引)有自己的命名空间。因此索引和表可以具有相同的名称(但这不是常见/良好的做法):
CREATE TABLE t(id INT PRIMARY KEY, col INT);
CREATE INDEX t ON t(col);
SELECT * FROM sys.tables WHERE name = 't';
SELECT * FROM sys.indexes WHERE name = 't';
很遗憾,我无法使用 inline index definition 创建相同的构造:
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t(col));
消息 2714 级别 16 状态 5 第 1 行
数据库中已经有一个名为“t”的对象。
-- below code is working correctly
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t1(col));
我错过了一些明显的东西还是一个错误?
【问题讨论】:
-
。 .这似乎是一个错误。当然,我倾向于将索引命名为“idx_
_ ”。这使得使用索引名称更容易理解消息。 -
@GordonLinoff 是的,我同意正确的命名约定至关重要。我只是好奇为什么单独的语句可以,而内联版本以错误结尾。我也认为这是一个错误,但首先我想排除最明显的原因:)
-
您的数据库是什么版本?尽管我同意这不是一个好的命名约定,但它在我的 2014 实例上没有任何问题。我没有任何更新的现成可用。
-
@SeanLange demo SQL Server 2014 现在我很确定这是一个错误 :)
-
这很奇怪。在 2014 年工作,但在 2017 年失败......对我来说似乎是一个错误。
标签: sql sql-server tsql create-table sql-server-2017