SSMS 17.4,Win10 1709上的SQL Server 2017开发人员版
我已经安装了WorldWideImporters示例数据库。其中一个表Sales.Customers有几个外键和几个外键索引。在编写表脚本(脚本表,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具有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中的错误还是我误解了什么?
答案 0 :(得分:2)
默认情况下,SSMS中的索引编写处于关闭状态。就个人而言,这是我重新开启脚本权限和触发器的第一件事。您可以通过以下方式找到此设置: