2013-06-20 51 views
1

我想設置標識種子參數創建表,從VAR得到它。這樣SQL恆等式不接收參數

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))

但我不知道它是關於語法的。有人能解釋我在哪裏,我錯了嗎?:)

+1

您將需要使用動態SQL這一點。這是什麼原因?你還在什麼版本的SQL Server? –

+0

該表用作複雜導入過程的臨時表,因此需要將正確的標識種子與主表內聯以完成導入。你能解釋一些關於動態sql的信息嗎? – Alex

+0

Server 2012中表達 – Alex

回答

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可以不受導入過程的任何插件。

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語句。