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 Books Online によると)。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);