我生成了一个脚本,该脚本为该数据库创建了所有用户和模式,当我用IF EXISTS检查包装CREATE语句时,我发现它不允许CREATE SCHEMA调用在BEGIN / END块中运行。它抱怨说这是无效的语法。但是我可以自己运行命令。下面是代码示例。我正在使用SQL Server 2008和Management Studio R2。为什么此语法无效?
--DROP SCHEMA [acme] IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme')) BEGIN CREATE SCHEMA [acme] AUTHORIZATION [dbo] END
模式创建必须是批处理中唯一的语句。解决它的一种方法是这样的:
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme')) BEGIN EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]') END