c# - 不能在用户事务内使用 CREATE FULLTEXT INDEX/CATALOG 语句

标签 c# sql-server t-sql transactions full-text-search

我有一个数据库版本控制应用程序来更新已部署的数据库。它几乎可以顺利运行所有 SQL 语句,但是当我决定使用全文搜索并生成脚本来使用像 follow 这样的语句时,它就崩溃了。

CREATE FULLTEXT CATALOG [ProductCatalog]

--Create fulltext index on Product
CREATE FULLTEXT INDEX ON [tblProduct] KEY INDEX [PK_Catalog]
    ON ([ProductCatalog]) WITH (CHANGE_TRACKING AUTO)
ALTER FULLTEXT INDEX ON [tblProduct] ADD ([ProductName] LANGUAGE [English])
ALTER FULLTEXT INDEX ON [tblProduct] ENABLE

我使用以下代码在 C# SqlTransaction 中执行 SQL 文件

SqlConnection cnn = new SqlConnection("cstring");
SqlTransaction trn = cnn.BeginTransaction();

cnn.Open();

using (SqlCommand cmd = cnn.CreateCommand())
{
    cmd.Connection = cnn;       
    cmd.Transaction = trn;

    cmd.CommandText = SQLScript;
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();
}

trn.Commit();        
cnn.Close();

如何在没有事务的情况下运行我的脚本?

最佳答案

我修改了代码来执行脚本

SqlConnection cnn = new SqlConnection("cstring");
SqlTransaction trn = null;

cnn.Open();

using (SqlCommand cmd = cnn.CreateCommand())
{
    cmd.Connection = cnn;

    if(!SQLScript.Contains("FULLTEXT"))
    {
        trn = cnn.BeginTransaction();
        cmd.Transaction = trn;
    }        

    cmd.CommandText = SQLScript;
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();
}

if(trn!=null)
    trn.Commit();

cnn.Close();

关于c# - 不能在用户事务内使用 CREATE FULLTEXT INDEX/CATALOG 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33172907/

相关文章:

sql-server - 用于创建团队的 SQL 查询

sql-server - TSQL - XML 查询帮助

c# - 如何检查 6 :00 PM to 9:00 PM 等字符串是否存在时间冲突

c# - 正则表达式匹配两个字符之一

SQL - 对公共(public)表表达式进行排序

sql - 重试 INSERT 导致的死锁

sql-server - 如何在 SQL Server 中将上一个结果集用于下一个查询

c# - 修复 C# 异步方法顺序执行

c# - 使用 LINQ 查找两个数据对象之间的差异

sql-server - T-SQL:获取全部,但在 'not null' 上加入