SQL Server 2000兼容脚本

SQL Server 2000兼容脚本,sql,sql-server,sql-server-2005,sql-server-2000,Sql,Sql Server,Sql Server 2005,Sql Server 2000,此T-SQL脚本在SQLServer2005中运行良好,但在SQLServer2000中,它在“Try”“End”附近表示不正确的语法。需要帮忙吗 Begin Transaction Begin Try UPDATE Test SET RefID = 'bc27de13-2323-4ce8-8c87-0171efbd812a' WHERE RefID = 'bc27de13-2323-4ce8-8c87-0171ffbd812a'; DELETE FROM Physi

此T-SQL脚本在SQLServer2005中运行良好,但在SQLServer2000中,它在“Try”“End”附近表示不正确的语法。需要帮忙吗

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

正如西肯德在他的评论中所说,波斯特提出了几乎完全相同的问题,这里的答案是相同的。SQL Server 2000不支持try..catch;这是在SQLServer2005中添加的。因此,无论您尝试什么,它都不会在SQL Server 2000中工作。

正如@Ken White所说的那样,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 
开始交易
更新测试
设置RefID='bc27de13-2323-4ce8-8c87-0171efbd812a'
式中,RefID=‘bc27de13-2323-4ce8-8c87-0171ffbd812a’;
如果@@ERROR0
回滚事务
从医生处删除
其中RefID='bc27de13-2323-4ce8-8c87-0171ffbd812a'
如果@@ERROR0
回滚事务
提交事务

检查此问题它与您的问题类似如果您编写代码的数据库是SQL Server 2000数据库,为什么要在SQL Server 2005中开发?如果根据正确的数据库进行开发,就永远不会出现此问题。你所做的就是浪费你的公司的时间去写那些不可能工作的代码。