1

テーブルの作成中に IDENTITY シード パラメータを設定しようとしており、変数から取得しています。このようなもの

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 に答える