Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何使用Microsoft.SqlServer.Management.Smo以编程方式导出SQL架构_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

Sql server 如何使用Microsoft.SqlServer.Management.Smo以编程方式导出SQL架构

Sql server 如何使用Microsoft.SqlServer.Management.Smo以编程方式导出SQL架构,sql-server,database,sql-server-2008,Sql Server,Database,Sql Server 2008,我在C#中构建了一个简单的实用程序,它使用对象导出数据库模式。在我添加全文索引之前,它一直工作得很好 当它导出用于创建全文索引的SQL时,它不包括索引中定义的列。例如,假设我有一个名为“Recipes”的表,在名为“RecipeName”“Description”的FT索引中包含两列。使用my utility转储架构会生成以下SQL: CREATE FULLTEXT INDEX ON [dbo].[Recipes] KEY INDEX [PK_Recipes]ON ([ft], FILEGROU

我在C#中构建了一个简单的实用程序,它使用对象导出数据库模式。在我添加全文索引之前,它一直工作得很好

当它导出用于创建全文索引的SQL时,它不包括索引中定义的列。例如,假设我有一个名为“Recipes”的表,在名为“RecipeName”“Description”的FT索引中包含两列。使用my utility转储架构会生成以下SQL:

CREATE FULLTEXT INDEX ON [dbo].[Recipes]
KEY INDEX [PK_Recipes]ON ([ft], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)
我希望被抛弃的是以下内容(请注意专栏):

下面是从数据库文件生成模式的C#:

static void GenerateScript(string sourceDbPath, string destinationScriptPath)
{
    try
    {
        string           connString = string.Format(@"Data Source=.;AttachDbFilename={0};Integrated Security=True;User Instance=True", sourceDbPath);
        SqlConnection       sqlConn = new SqlConnection(connString);
        ServerConnection serverConn = new ServerConnection(sqlConn);
        Server               server = new Server(serverConn);            
        Database           database = server.Databases[sourceDbPath];
        Transfer           transfer = new Transfer(database);
        ScriptingOptions    options = new ScriptingOptions();

        options.AppendToFile = false;       // Overwrite file
        options.ClusteredIndexes = true;
        options.Indexes = true;
        options.DriAll = true;
        options.Triggers = true;
        options.Bindings = true;
        options.Default = true;
        options.IncludeDatabaseContext = false;
        options.IncludeHeaders = true;
        options.FullTextIndexes = true;

        options.SchemaQualify = true;
        options.SchemaQualifyForeignKeysReferences = true;
        options.ScriptSchema = true;
        options.ScriptData = false;
        options.ScriptDrops = false;

        options.FileName = destinationScriptPath;
        transfer.Options = options;
        transfer.CopyAllFullTextCatalogs = true;
        transfer.CopyAllFullTextStopLists = true;
        transfer.CopyAllTables = true;

        transfer.ScriptTransfer();
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.ToString());
        Environment.Exit(-1);
    }
}

有人能发现我遗漏了什么吗?

我找不到包含全文索引create语句中的列的脚本选项组合

因此,我通过执行和存储过程来查询数据库中的全文索引信息。这使我能够手工构造语句


虽然不理想,但效果很好。

您是否需要单独编写这些列的脚本?不过你不应该这么做。嘿,你有没有在任何地方公开你的代码?我对做类似的事情很感兴趣。不,对不起。我无法打开这段代码的源代码。
static void GenerateScript(string sourceDbPath, string destinationScriptPath)
{
    try
    {
        string           connString = string.Format(@"Data Source=.;AttachDbFilename={0};Integrated Security=True;User Instance=True", sourceDbPath);
        SqlConnection       sqlConn = new SqlConnection(connString);
        ServerConnection serverConn = new ServerConnection(sqlConn);
        Server               server = new Server(serverConn);            
        Database           database = server.Databases[sourceDbPath];
        Transfer           transfer = new Transfer(database);
        ScriptingOptions    options = new ScriptingOptions();

        options.AppendToFile = false;       // Overwrite file
        options.ClusteredIndexes = true;
        options.Indexes = true;
        options.DriAll = true;
        options.Triggers = true;
        options.Bindings = true;
        options.Default = true;
        options.IncludeDatabaseContext = false;
        options.IncludeHeaders = true;
        options.FullTextIndexes = true;

        options.SchemaQualify = true;
        options.SchemaQualifyForeignKeysReferences = true;
        options.ScriptSchema = true;
        options.ScriptData = false;
        options.ScriptDrops = false;

        options.FileName = destinationScriptPath;
        transfer.Options = options;
        transfer.CopyAllFullTextCatalogs = true;
        transfer.CopyAllFullTextStopLists = true;
        transfer.CopyAllTables = true;

        transfer.ScriptTransfer();
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.ToString());
        Environment.Exit(-1);
    }
}