【发布时间】:2018-02-13 00:49:35
【问题描述】:
SSMS 17.4,Win10 1709 上的 SQL Server 2017 开发者版
我已经安装了 WorldWideImporters 示例数据库。其中一张表 Sales.Customers 有几个外键和几个外键索引。在为表编写脚本时(Script Table、CREATE To…),脚本包括外键,但不包括外键索引。如果我只是更改表的名称并运行生成的脚本,则会使用所有 FK 约束创建表,但没有 FK 索引。
对于即使您没有安装 WWI 示例也能看到的内容,我这样做了。
CREATE TABLE bar (
bar_id int,
col1 varchar(20),
CONSTRAINT pk_bar PRIMARY KEY CLUSTERED (bar_id)
)
CREATE TABLE foo (
foo_id int,
foobar_id int,
col1 varchar(20),
CONSTRAINT pk_foo PRIMARY KEY CLUSTERED (foo_id)
)
ALTER TABLE foo WITH CHECK
ADD CONSTRAINT FK_bar FOREIGN KEY (foobar_id) REFERENCES bar (bar_id)
ALTER TABLE foo CHECK CONSTRAINT FK_bar
这将创建两个表,其中 foo 具有对 bar 的 FK 约束。然后我从 SSMS 编写了表格。
CREATE TABLE [dbo].[foo](
[foo_id] [int] NOT NULL,
[foobar_id] [int] NULL,
[col1] [varchar](20) NULL,
CONSTRAINT [pk_foo] PRIMARY KEY CLUSTERED
(
[foo_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [USERDATA]
) ON [USERDATA]
GO
ALTER TABLE [dbo].[foo] WITH CHECK ADD CONSTRAINT [FK_bar] FOREIGN KEY([foobar_id])
REFERENCES [dbo].[bar] ([bar_id])
GO
ALTER TABLE [dbo].[foo] CHECK CONSTRAINT [FK_bar]
GO
到目前为止,一切都很好。
但后来我在 FK 列的 foo 上添加了一个索引。
CREATE NONCLUSTERED INDEX FK_bar ON foo (foobar_id)
为表格编写脚本然后生成与上面完全相同的脚本。因此,无论 FK 列是否有索引,SSMS 都会生成相同的脚本。 (我通过 sp_helpindex 确认 FK 索引确实存在。)
这是 SSMS 中的错误还是我误解了什么?
【问题讨论】:
-
SSMS 设置中有一个脚本选项列表,默认情况下可能会关闭索引(目前无法检查)。
标签: sql-server sql-server-2017 ssms-17