我正在尝试在事务下执行以下语法,但它会抛出错误: -
这是我在交易下执行的脚本: -
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
-- full text search is installed. Run the necessary procedures
BEGIN
declare @dbName nvarchar(128)
select @dbName = DB_Name()
exec('ALTER DATABASE [' + @dbName + '] SET RECOVERY SIMPLE')
if(0 = DATABASEPROPERTY(DB_Name(),'IsFulltextEnabled'))
BEGIN
-- Full text is installed but not enabled on the Database. Enable that
EXEC sp_fulltext_database 'enable'
END
-- Check if there are current tables in full text search. If yes, remove them
if(1 = INDEXPROPERTY(Object_id('Blog'),'PK_Blog','IsFulltextKey'))
BEGIN
-- Drop the full text index
EXEC sp_fulltext_table 'Blog','drop'
END
END
我收到以下错误: -
多语句事务中不允许使用ALTER DATABASE语句。 无法在事务中执行过程'sys.sp_fulltext_table'。 无法在事务中执行过程'sys.sp_fulltext_table'。 无法在事务中执行过程'sys.sp_fulltext_table'。
你们有什么想法?
编辑: - 我想知道有没有办法做到这一点。我正在尝试更改数据库中列的数据类型,并为全文搜索启用它们,因此我希望以某种方式完成上述操作。 :(
答案 0 :(得分:3)
你在问什么?
您收到的错误信息正好解释了问题所在。您无法在交易下执行该SPROC。
答案 1 :(得分:2)
这里的问题是,像Alter Database这样的大多数数据定义语言语句(DDL)在执行时会发出隐式提交。 TSQL代码试图通过告诉您“您不能这样做”来保护您免受意外结果的影响。
答案 2 :(得分:0)
您可以尝试滚动自己的交易。基本上,在每个步骤捕获已完成的操作,如果有任何失败,请手动撤消到故障点的步骤。但这很危险,因为如果发生灾难性故障,那么你可能无法回滚所有内容,而且总有可能错过某种组合。