SQL бросил ошибку при выполнении под транзакцией - PullRequest
1 голос
/ 26 мая 2009

Я пытаюсь выполнить следующий синтаксис в транзакции, но выдает ошибку: -

это скрипт, который я выполняю в транзакции: -

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 не может быть выполнена внутри транзакции.

Ребята, у вас есть идеи ??

Edit: - Я хочу знать, есть ли выход для этого. Я пытаюсь изменить тип данных столбцов в базе данных, и они включены для fulltextsearch, поэтому я хочу, чтобы выше было сделано как-то. (

Ответы [ 3 ]

3 голосов
/ 26 мая 2009

Что ты спрашиваешь?

Вам было выдано сообщение об ошибке, которое точно объясняет, в чем проблема. Вы не можете выполнить этот SPROC в транзакции.

2 голосов
/ 26 мая 2009

Проблема здесь в том, что большинство операторов языка определения данных (DDL), таких как Alter Database, при выполнении выдают неявное принятие. Код TSQL пытается защитить вас от неожиданных результатов, говоря «Вы не можете этого сделать».

0 голосов
/ 26 мая 2009

Вы можете попытаться выполнить собственную транзакцию. По сути, на каждом шаге фиксируйте, что было сделано, и, если что-то не получается, вручную отменяйте шаги до точки сбоя. Это опасно, потому что, если произойдет катастрофический сбой, вы не сможете откатить все, и всегда есть вероятность, что вы можете пропустить какую-то комбинацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...