更改事务中的全文索引列

时间:2009-10-28 16:31:34

标签: sql sql-server-2005 transactions full-text-search

我正在编写一个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语句不能在用户事务中使用”。有没有办法在交易中实现这一点?通过使这个代码工作,或以其他方式将索引更改为新类型?

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

在事务中无法更改全文目录和索引以及一些其他语句。 请参阅:http://msdn.microsoft.com/nl-nl/library/ms191544(v=sql.105).aspx上的不允许陈述列表 我认为没有解决方法。