2009-11-27 4 views
-1

Этот сценарий T-SQL отлично работает в SQL Server 2005, но в SQL Server 2000 он говорит о некорректном синтаксисе рядом с «Попробовать» «Конец». Любая помощь, пожалуйста?Сценарий, совместимый с SQL Server 2000

Begin Transaction 
Begin Try 
    UPDATE Test 
    SET RefID = 'bc27de13-2323-4ce8-8c87-0171efbd812a' 
    WHERE RefID = 'bc27de13-2323-4ce8-8c87-0171ffbd812a'; 

    DELETE FROM Physician 
    WHERE RefID = 'bc27de13-2323-4ce8-8c87-0171ffbd812a' 

    Commit Transaction 
End Try 
Begin Catch 
    Rollback Transaction 
End Catch 
+2

http://stackoverflow.com/questions/1810032/try-catch-not-working-in-sql-server-2005/1810201#1810201 проверить этот вопрос аналогичен вашему вопросу – sikender

+1

Почему вы развиваетесь в SQL Server 2005, если база данных, на которую вы пишете код, является базой данных SQL Server 2000? У вас никогда не будет этой проблемы, если вы начнете против правильной базы данных. Все, что вы сделали, - это отходы ваших компаний, которые написали код, который не имеет возможности работать. – HLGEM

ответ

4

Как сказал Sikender в своем комментарии, this пост спрашивает почти точно такой же вопрос, и ответ здесь то же самое. SQL Server 2000 не поддерживает try..catch; что не было добавлено в SQL Server 2005. Поэтому независимо от того, что вы пытаетесь, это будет никогда работы в SQL Server 2000.

1

Как @Ken Уайт сказал try and catch не поддерживается в SQL Server 2000. Вы можете использовать @@ERROR для ваших цель. вы можете проверить его после каждого утверждения, и если произошла ошибка, выполните откат. Вы можете использовать следующий код:

Begin Transaction 
    UPDATE Test 
    SET RefID = 'bc27de13-2323-4ce8-8c87-0171efbd812a' 
    WHERE RefID = 'bc27de13-2323-4ce8-8c87-0171ffbd812a'; 
    if @@ERROR<>0 
     Rollback transaction 
    DELETE FROM Physician 
    WHERE RefID = 'bc27de13-2323-4ce8-8c87-0171ffbd812a' 
     if @@ERROR<>0 
      Rollback transaction 
    Commit Transaction