إزالة خيارات مؤشر العلائقية عند مؤشر الجدول البرمجة في SQL Server 2005

StackOverflow https://stackoverflow.com/questions/1014937

  •  06-07-2019
  •  | 
  •  

سؤال

واستخدام الكائن 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 أون لاين). كيف يمكنني الحصول على الكائن سيناريو ل<م> لا إخراج هذه الخيارات؟

وهنا هو رمز بلادي:

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 (أي غير المنضبط) مما يدرك معظم الناس. على سبيل المثال، هناك أي خيار لتغير السيناريو الأوامر بدلا من يخلق، على الرغم من SSMS يفعل ذلك لكائن السريعة القائمة تعديل البند.

في معظم هذه الحالات التي رأيتها، اتضح أن يكون من السهل نسبيا على التعامل معها في قانون بلدي عن طريق المسح الضوئي للو، إذا وجدت، ليحل محل النص المخالف. في سيناريو من هو جامد جدا في التنسيق انتاجها، لذلك لم أكن هناك حاجة حتى في التعابير المنطقية للقيام بذلك. لذلك، عندما كنت قد حصلت على إنشاء برنامج نصي للكائن جدول أود أن البحث عن ") WITH (PAD_INDEX ) ON" واستبدالها ب "ON" (تأكد من أن البدل الخاص بك وسوف عبور خط فواصل).

نصائح أخرى

ويمكنك الحصول على ما يقرب ما تريد باستخدام هذا:

وثابت الخاص سيناريو CreateScripter (الخادم)

{
    Scripter returnValue = new Scripter(server);
    returnValue.Options.TargetServerVersion = SqlServerVersion.Version90;
    returnValue.Options.TargetDatabaseEngineType = DatabaseEngineType.SqlAzureDatabase;
    returnValue.Options.NoTablePartitioningSchemes = true;
    returnValue.Options.NoFileGroup = true;
    return returnValue;
}

والنتيجة هي:

CREATE TABLE [dbo].[CacheData](
    [LastFileSystemUpdate] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK_CacheData] PRIMARY KEY CLUSTERED 
(
    [LastFileSystemUpdate] ASC
)WITH (STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF)
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top