我有一块看起来有点像这样的 SQL
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '{FOO}')
BEGIN
EXECUTE ('CREATE DATABASE {FOO}')
ALTER DATABASE {FOO} SET AUTO_CLOSE OFF
END
{FOO}
在运行时替换为用户可配置数据库的名称。逻辑是如果数据库已经存在,我不想创建它。
如果{FOO}
是,tempdb
那么当查询运行时我会失败
无法在数据库“tempdb”中设置选项“AUTO_CLOSE”。
我的问题是为什么我会失败? SELECT * FROM sys.databases WHERE name = 'tempdb'
返回零结果,所以我的整BEGIN/END
对肯定不应该运行?事实上,如果我print
在开始和结束之间放置一个语句,我看不到任何输出。
我的猜测是 SQL Server 正在对 SQL 进行某种 linting 以确保我不会乱用 tempdb?我已经通过使用解决了这个问题EXECUTE
,但我有点困惑为什么我必须这样做!