1

我试图在创建表时设置 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) 中)

但我不确定它是否与语法有关。有人可以解释一下我在哪里错了吗?:)

4

2 回答 2

1

这不能参数化。

您需要使用如下动态 SQL。

DECLARE @MaxID INTEGER

SELECT @MaxID = 1 + ISNULL(MAX(ID),0) FROM dbo.ProductQuotes

DECLARE @Script NVARCHAR(MAX) = 
N'
CREATE TABLE [dbo].[Z](
 [ID] int PRIMARY KEY not null IDENTITY(' + CAST(@MaxID AS NVARCHAR(10)) + ',1),
 [Number] int NULL,
 [Name] nvarchar(50) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
'

EXEC (@Script);

我假设您将采取预防措施以确保ProductQuotes在导入过程中不会受到任何插入的影响。

于 2013-06-20T10:54:47.023 回答
0

就像是

DECLARE @MaxID INTEGER
DECLARE @SQL varChar(4000)
SET @MaxID = (SELECT TOP 1 ID FROM dbo.ProductQuotes ORDER BY ID DESC) + 1;

Set @SQL = 'CREATE TABLE [dbo].[Z]([ID] int PRIMARY KEY not null IDENTITY(' +
Convert(VarChar(8),@MaxID) + 
',1), [Number] int NULL, [Name] nvarchar(50) COLLATE Cyrillic_General_CI_AS NULL) ON [PRIMARY]
Exec(@sql)

使用 @MaxID 的值构建 sql 语句,然后执行它。

于 2013-06-20T10:54:42.237 回答