Sql server 为什么生成的SSM脚本缺少索引?
SSMS 17.4,SQL Server 2017开发者版,Win10 1709 我已经安装了WorldWideImporters示例数据库。其中一个表Sales.Customers有几个外键和几个外键索引。编写表脚本(脚本表、创建到…)时,脚本包括外键,但不包括外键索引。如果我只是更改表的名称并运行生成的脚本,那么将使用所有FK约束创建表,但不使用任何FK索引 即使没有安装WWI示例,您也可以看到一些东西,我这样做了Sql server 为什么生成的SSM脚本缺少索引?,sql-server,sql-server-2017,ssms-17,Sql Server,Sql Server 2017,Ssms 17,SSMS 17.4,SQL Server 2017开发者版,Win10 1709 我已经安装了WorldWideImporters示例数据库。其中一个表Sales.Customers有几个外键和几个外键索引。编写表脚本(脚本表、创建到…)时,脚本包括外键,但不包括外键索引。如果我只是更改表的名称并运行生成的脚本,那么将使用所有FK约束创建表,但不使用任何FK索引 即使没有安装WWI示例,您也可以看到一些东西,我这样做了 CREATE TABLE bar ( bar_id int, col
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中默认关闭。就我个人而言,这是我第一次打开脚本权限和触发器。您可以通过以下方式找到此设置:
SSMS设置中有一个脚本选项列表,默认情况下可能会关闭索引(现在无法检查)。哇。我从SQL2K开始就使用SSMS,我从来没有见过这种情况(我不使用对象资源管理器,所以从来没有使用过对象资源管理器),我也不记得脚本以前没有索引。在最新版本的SSMS中,默认值是否发生了变化?不管怎样,非常感谢。@vr8ce我记得一直都是这样的。