我生成了一个脚本,该脚本为该数据库创建了所有用户和模式,当我用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
模式创建必须是批处理中的唯一语句。解决它的一种方法是这样的:
这里是一个更简单的解决方案(更简单的检查):
它必须成批出售。您可以将其包装在EXEC('')
[CREATE SCHEMA
必须在其自己的批次中,因此将其嵌入在EXEC
中,您应该可以。
有时(始终)不允许您使用Dynamic SQL,因此使用EXEC
并非最佳方法。使用GO
语句可以做得更好: