Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么生成的SSM脚本缺少索引?_Sql Server_Sql Server 2017_Ssms 17 - Fatal编程技术网

Sql server 为什么生成的SSM脚本缺少索引?

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

SSMS 17.4,SQL Server 2017开发者版,Win10 1709

我已经安装了WorldWideImporters示例数据库。其中一个表Sales.Customers有几个外键和几个外键索引。编写表脚本(脚本表、创建到…)时,脚本包括外键,但不包括外键索引。如果我只是更改表的名称并运行生成的脚本,那么将使用所有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中默认关闭。就我个人而言,这是我第一次打开脚本权限和触发器。您可以通过以下方式找到此设置:

  • 在SSMS中,打开“工具”菜单并选择选项
  • 向下滚动到SQL Server对象资源管理器并展开树
  • 单击脚本节点并将脚本索引更改为true

  • SSMS设置中有一个脚本选项列表,默认情况下可能会关闭索引(现在无法检查)。哇。我从SQL2K开始就使用SSMS,我从来没有见过这种情况(我不使用对象资源管理器,所以从来没有使用过对象资源管理器),我也不记得脚本以前没有索引。在最新版本的SSMS中,默认值是否发生了变化?不管怎样,非常感谢。@vr8ce我记得一直都是这样的。