代码之家  ›  专栏  ›  技术社区  ›  Andrew K

在事务中更改全文索引列

  •  6
  • Andrew K  · 技术社区  · 16 年前

    我正在编写一个SQL数据更新程序,将旧的text/ntext/image类型的列转换为varchar/nvarchar/varbinary。当系统启动以从旧版本更新数据库时,更新程序在事务中运行。我已经让SQL自己工作了,但是一些要更改的列是全文索引的,这意味着我不能在不首先删除索引的情况下更改它们的类型,如:

    ALTER FULLTEXT INDEX ON Table DROP (Column)
    exec dbo.ConvertDataType 'Table', 'Column', 'nvarchar(max)'
    ALTER FULLTEXT INDEX ON Table ADD (Column)

    问题是,由于错误“alter fulltext index statement cannot be used in a user transaction”,第一行在数据更新程序中不起作用。是否有任何方法可以在事务中实现这一点?要么让这段代码工作,要么以其他方式将索引更改为新类型?

    2 回复  |  直到 10 年前
        1
  •  9
  •   Remus Rusanu    16 年前

    不。许多DDL更改在事务上下文中不起作用,因为它们不能保证回滚。只要语句只修改一些内部数据库元数据,事务内部就有可能支持回滚,因为回滚是由普通数据库表更新回滚处理的。但是,创建文件、打开套接字、连接到外部服务(如全文索引服务)的语句无法回滚,因此事务内部不支持这些语句。

        2
  •  2
  •   Cor Westra    13 年前

    在事务中不能更改全文目录和索引以及其他一些语句。 请参阅以下内容中不允许的语句列表: http://msdn.microsoft.com/nl-nl/library/ms191544(v=sql.105).aspx
    我想周围没有工作。

    推荐文章