我正在尝试在创建表时设置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))
但我不确定它是关于语法的。有人可以解释一下我在哪里错了吗? :)
答案 0 :(得分: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
在导入过程中不会受到任何插入。
答案 1 :(得分: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语句,然后执行它。