【发布时间】:2013-06-20 18:54:47
【问题描述】:
我试图在创建表时设置 IDENTITY 种子参数,从 var 中获取它。像这样的
DECLARE @MaxID INTEGER
SET @MaxID = (SELECT TOP 1 ID FROM dbo.ProductQuotes ORDER BY ID DESC) + 1;
CREATE TABLE [dbo].[Z](
[ID] int PRIMARY KEY not null IDENTITY(@MaxID,1),
[Number] int NULL,
[Name] nvarchar(50) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO
错误是“'@MaxID' 附近的语法不正确(在这一行 [ID] int PRIMARY KEY not null IDENTITY(@MaxID,1) )
但我不确定它是否与语法有关。有人可以解释一下我在哪里错了吗? :)
【问题讨论】:
-
您需要为此使用动态 SQL。这样做的原因是什么?还有你使用的是什么版本的 SQL Server?
-
这个表是一个复杂导入过程的临时表,所以它需要有正确的标识种子才能与主表内联以完成导入。你能多解释一下动态sql吗?
-
使用 SQL Server 2012,您可以使用 SEQUENCE 来确保两个表之间的连续数字msdn.microsoft.com/en-us/library/ff878091.aspx
-
@gbn - 确保顺序不连续(
IDENTITY也是如此) -
@MartinSmith:是的,但它允许预先分配 ID,因此 ProductQuotes 上没有冲突(如您的回答所述)并避免动态 SQL