我在SQL Server Mgmt Studio中保持“检查对象是否存在”选项打开,因为我需要SQL Server自动包含“IF EXISTS“语句,然后再删除和重新创建对象。当对象存在检查打开时,为SQL对象生成静态SQL脚本而不是动态SQL
现在,无论何时我右键单击并尝试为任何对象生成“创建和删除脚本”,它都会将整个CREATE语句作为动态SQL,我认为这是一个纯粹的混乱,并且更容易出错。
当打开对象存在检查时,是否有任何选项可以使SSMS生成静态SQL脚本?
我使用SSMS 2012
有很多关于SO问的问题,为什么SQL Server在'如果不存在/创建'块时会“忽略”IF。例如。 [这里](https://stackoverflow.com/q/120966/15498),都有相同的解释 - 当*编译* CREATE时,SQL Server会抛出一个错误,因为对象已经存在。所以另一种方法是,没有动态SQL,就是让脚本产生错误。你确定你想要吗? –
SQL Server 2016既有'Drop If Exists'也有'CREATE OR ALTER',但这并不能帮助你,因为你在2012年。这里的问题是'CREATE'必须是批量中唯一的批量对象类型,所以这是做到这一点的唯一方法。 –