【发布时间】:2018-03-14 18:12:10
【问题描述】:
我想要一张有两列 [Id] [bigint] 和 [Name] [nvarchar](63) 的小桌子。该列用于标签,它将包含所有存在的标签。
我想强制按名称列按字母顺序排序,以便更快地找到给定的标签。
必要的点是:
- Id 是我的主键,我使用它,例如用于外键。
- 名称也是独一无二的。
- 我想按名称的字母顺序排序。
- 我需要 SQL 命令来创建约束,因为我使用脚本来创建表。
我知道您可以使用聚簇索引对表进行排序,但我知道表不一定按此顺序。
我的查询看起来像这样,但我不明白如何在 Name 上创建聚集索引,但仍将 Id 作为主键:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Tags]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Tags]
(
[Id] [bigint] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](63) NOT NULL,
CONSTRAINT AK_TagName UNIQUE(Name)
)
END
编辑:
我决定听从狗仔队的建议。因此,如果您有同样的问题,请确保您也阅读了他的答案。
【问题讨论】:
-
没有明确的 ORDER BY 就没有有序表之类的东西。时期。想想并行执行吧。
-
表格没有顺序,从来没有,也没关系。重要的是您要查询什么。
标签: sql-server