【发布时间】:2016-12-14 20:28:47
【问题描述】:
我正在使用以下脚本:
DECLARE @dbName NVARCHAR(20) = 'ABC';
EXEC ( N' USE ' + @dbName + '
GO
-- Create Schema
CREATE SCHEMA meta
GO
-- Create Log Table
CREATE TABLE meta.LogAudit(
[EventDate] [datetime] NOT NULL DEFAULT (getdate()),
[EventType] [nvarchar](64) NULL
)
GO
'
);
但它会引发以下错误。
Msg 111, Level 15, State 1, Line 5
'CREATE SCHEMA' must be the first statement in a query batch.
Msg 102, Level 15, State 1, Line 22
Incorrect syntax near 'GO'.
这是为什么呢?
--
编辑:
这个答案似乎在回答我的问题:
dynamic sql error: 'CREATE TRIGGER' must be the first statement in a query batch
因此,在我的情况下,我似乎无法对其进行动态编程。我的整个代码按以下方式工作:
USE DB
GO
CREATE SCHEMA SCH
GO
CREATE TABLE SCH.TABLE
GO
CREATE TRIGGER TRG
GO
所以SCHEMA和TRIGGER需要是第一个查询语句,所以不能这样写。
【问题讨论】:
-
您可以对其进行动态编程。只需拆分字符串并分别执行它们
-
@Dnac 尝试从下面我更新的答案中创建模式的动态 sql。我确信也可以为触发器创建类似的东西。只需检查架构创建是否适合您。
-
另一种选择是使用
sqlcmd.exe或SMO 对象来生成as shown in this question。 -
@PanagiotisKanavos 同意,我将不得不想出一些不同的方法。此外,我不会为每个数据库运行它,而只是为其中一些数据库运行,但我认为这也不应该是一个严重的问题。
标签: sql-server sql-server-2016 dynamicquery