为什么不能在SQL Management Studio的开始/结束块中使用“创建模式”?

问题描述 投票:63回答:5

我生成了一个脚本,该脚本为该数据库创建了所有用户和模式,当我用IF EXISTS检查包装CREATE语句时,我发现它不允许在BEGIN / END块中运行CREATE SCHEMA调用。它抱怨说这是无效的语法。但是我可以自己运行命令。下面是代码示例。我正在使用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
sql sql-server tsql
5个回答
103
投票

模式创建必须是批处理中的唯一语句。解决它的一种方法是这样的:


34
投票

这里是一个更简单的解决方案(更简单的检查):


8
投票

它必须成批出售。您可以将其包装在EXEC('')


3
投票

[CREATE SCHEMA必须在其自己的批次中,因此将其嵌入在EXEC中,您应该可以。


1
投票

有时(始终)不允许您使用Dynamic SQL,因此使用EXEC并非最佳方法。使用GO语句可以做得更好:

© www.soinside.com 2019 - 2024. All rights reserved.