Database 如果脚本出现错误,则停止SQL创建数据库 情况:

Database 如果脚本出现错误,则停止SQL创建数据库 情况:,database,error-handling,sql-server-2014,Database,Error Handling,Sql Server 2014,当您运行一个脚本并出现错误时(即使只有一个),SQL仍然会创建数据库。运行脚本时,会弹出一些错误,但您会看到数据库已创建。。。但是没有特定的表、触发器、关系等等 它只创建你在脚本中“做得好”的内容;这是一个完全无用的结果,因为您需要整个数据库,而不仅仅是“做对了”的内容。现在,您必须删除未完成的数据库,纠正错误,并希望这次一切正常。不,你手上还有一个不完整的、无用的数据库,你必须再次删除它并再次检查你的脚本(冲洗并重复,直到所有错误都被解决) SQL为什么会这样做?在脚本中解决错误之前不要创建任

当您运行一个脚本并出现错误时(即使只有一个),SQL仍然会创建数据库。运行脚本时,会弹出一些错误,但您会看到数据库已创建。。。但是没有特定的表、触发器、关系等等

它只创建你在脚本中“做得好”的内容;这是一个完全无用的结果,因为您需要整个数据库,而不仅仅是“做对了”的内容。现在,您必须删除未完成的数据库,纠正错误,并希望这次一切正常。不,你手上还有一个不完整的、无用的数据库,你必须再次删除它并再次检查你的脚本(冲洗并重复,直到所有错误都被解决)

  • SQL为什么会这样做?在脚本中解决错误之前不要创建任何东西不是更好吗?这样,我就不必浪费时间删除很多没有我所需要的一切的数据库

  • 有没有一种方法或选项“告诉”SQL不要创建数据库 除非脚本完全没有错误


  • 我真的希望有这样一个解决方案,不断删除数据库是非常困难的。谢谢。

    是的,有一个简单的解决方案。这叫做事务管理:

    SET XACT_ABORT ON
    BEGIN TRANSACTION
    
    -- Do your things
    
    COMMIT TRANSACTION
    

    如果出现任何故障,整个事务将回滚,就好像它从未存在过一样。

    简而言之,大多数rdbms都使用一种称为模式的东西。例如,当您创建一个表时,软件会将该表的元数据添加到持久性存储中,以便在出现错误时(例如,试图将一个包含40个字符的字符串填充到一个创建为容纳20个字符的字段中)也能帮助您编写脚本。当您编写数据库创建脚本时,您必须意识到这些安全检查尚未创建。此外,我要提到的是,您应该研究异常处理。由于try…raiseerror..catch…finally操作得到支持,您可以使用另一个安全网来包装代码。