【发布时间】:2015-07-26 13:41:48
【问题描述】:
尝试执行以下操作时,出现错误
消息 102,第 15 级,状态 1,第 9 行
'GO' 附近的语法不正确。消息 102,第 15 级,状态 1,第 11 行
'GO' 附近的语法不正确。消息 102,第 15 级,状态 1,第 13 行
'GO' 附近的语法不正确。
谁能告诉我哪里出错了?我不明白语法是怎么错的
DECLARE @table nvarchar(100);
DECLARE @sql nvarchar(max);
SET @table = 'FooTable';
SET @sql = N'CREATE TABLE [dbo].[' + @table + '](
[id] [int] IDENTITY(1,1) NOT NULL,
[AddedBy] [int] NOT NULL,
[AddedDate] [datetime2](7) NOT NULL,
CONSTRAINT [PK_' + @table + '] PRIMARY KEY CLUSTERED
( [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[' + @table + '] ADD CONSTRAINT [DF_' + @table + '_AddedBy] DEFAULT ((-1)) FOR [AddedBy]
GO
ALTER TABLE [dbo].[' + @table + '] ADD CONSTRAINT [DF_' + @table + '_AddedDate] DEFAULT (getutcdate()) FOR [AddedDate]
GO';
exec (@sql)
感谢您的帮助。
【问题讨论】:
-
从你的脚本中删除所有
GO并运行它 -
GO 只是被客户端工具理解为批处理分隔符而不是 SQL Server 本身。
-
有什么方法我不能提示输入这个值吗? SET @table = 'FooTable';
-
不幸的是 - 没有。 TSQL 无法做到这一点。使用 osql 可能会有黑客攻击,但我从来没有做过这样的事情。 SSMS 模板是您可以获得的最接近的模板。
标签: sql-server