为什么我不能在SQL Management Studio的开始/结束块中使用“创build模式”?
我生成了一个脚本,创build这个数据库的所有用户和模式,当我用CRE EXETS检查包装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
模式创build必须是批处理中唯一的语句。 解决这个问题的一种方法是这样的:
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme')) BEGIN EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]') END
这是一个更简单的解决scheme(更简单的检查):
IF (SCHEMA_ID('acme') IS NULL) BEGIN EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]') END
它需要在自己的批次。 你可以把它包装在EXEC('')
EXEC('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
我相信这个需求的原因是在版本6.5中引入了一个较旧版本的CREATE SCHEMA
语法( 至less在这里是这么说的 )。
CREATE SCHEMA
必须在它自己的批处理,所以embedded到一个EXEC
,你应该没问题。
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme')) BEGIN EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]') END