gpt4 book ai didi

sql-server-2005 - 在 SQL Server 2005 中编写表索引脚本时删除关系索引选项

转载 作者:行者123 更新时间:2023-12-04 07:17:21 26 4
gpt4 key购买 nike

使用 Microsoft.SqlServer.Management.Smo.Scripter 对象,我为数据库中的每个表生成脚本,包括索引/约束。然而,当它生成脚本时,它包括所有索引选项,即使它们是默认值,例如

CREATE TABLE [dbo].[AgeGroup](
[AgeGroupID] [int] NOT NULL),
CONSTRAINT [PK_AgeGroup] PRIMARY KEY CLUSTERED
(
[AgeGroupID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],

主键约束的 WITH 子句中的所有选项都设置为默认值(至少根据 SQL Server 联机丛书)。如何让 Scripter 对象输出这些选项?

这是我的代码:

Server server = new Server("MYSERVER");

Scripter scripter = new Scripter(server);
scripter.Options.Indexes = true;
scripter.Options.AnsiPadding = true;
scripter.Options.AnsiFile = true;
scripter.Options.Permissions = true;
scripter.Options.ClusteredIndexes = true;
scripter.Options.DriAll = true;

Urn[] urns = new Urn[1];

Table t = server.Databases["MYDATABASE"].Tables["AgeGroup"];
urns[0] = t.Urn;

StringCollection sc = scripter.Script(urns);

using (StreamWriter sw = File.CreateText("AgeGroup.Table.sql"))
foreach (string str in sc)
sw.WriteLine(str);

最佳答案

显然,没有脚本选项可以控制它。 SMO.Scripting 中类似的东西(即不受控制的)比大多数人意识到的要多。例如,没有选项可以编写 ALTER 命令而不是 CREATES,即使 SSMS 为对象快速菜单修改项执行了它。

在我见过的大多数情况下,事实证明,通过扫描并在找到问题文本后进行替换,在我的代码中处理它相当容易。脚本编写器的输出格式非常严格,因此我什至不需要 RegEx 来执行此操作。因此,当您获得表对象的 CREATE 脚本时,我会搜索“) WITH (PAD_INDEX) ON ”并将其替换为“ON ”(确保您的通配符会越线休息)。

关于sql-server-2005 - 在 SQL Server 2005 中编写表索引脚本时删除关系索引选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com