无法在开始块内创建架构

mze*_*ler 7 sql sql-server

我完全难过了.我有以下块:

IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'Test')
BEGIN
    CREATE SCHEMA Test;
END;
Run Code Online (Sandbox Code Playgroud)

如果我针对我们的SQL Server 2008运行此操作,我会在关键字'SCHEMA'附近获得"消息156,级别15,状态1,行3:不正确的语法",但如果我CREATE SCHEMA单独运行该命令,则可以正常工作.

此外,这有效:

IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'Test')
BEGIN
    PRINT 'CREATE GOES HERE';
END;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

gve*_*vee 19

错误消息在这里有点红色鲱鱼....执行以下操作以查看"真正的"错误是什么:

SELECT * FROM sys.schemas
CREATE SCHEMA Test
Run Code Online (Sandbox Code Playgroud)

Msg 111,Level 15,State 1,Line 2

'CREATE SCHEMA'必须是查询批处理中的第一个语句.

要解决此问题,您可以使用以下EXEC功能:

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Test')
  BEGIN
    EXEC ('CREATE SCHEMA Test;');
  END;
Run Code Online (Sandbox Code Playgroud)


Wil*_* Wu 9

如果您需要在另一个数据库而不是当前上下文中创建模式,您应该运行以下脚本。

set @myScript = 'exec '+ QUOTENAME(@DBName) + '..sp_executesql N''create schema MySchema'''
执行(@myScript)


Dev*_*art 5

试试这个——

IF NOT EXISTS(SELECT 1 FROM sys.schemas WHERE name = 'Test')
BEGIN
    EXEC sys.sp_executesql N'CREATE SCHEMA Test;'
END
Run Code Online (Sandbox Code Playgroud)