2009-08-26 8 views
4

別のテーブルのフィールドの最大値から始まるIDシードを持つテーブル変数を作成する必要がありますか?テーブル変数にIDシードをプログラムで設定する

DECLARE @IdentitySeed int 

SET @IdentitySeed = (SELECT MAX(HHRecId) +1 FROM xxx) 

DECLARE @HH TABLE (
    HHId INT IDENTITY(@IdentitySeed,1) 
    ,AddressType CHAR(1) 
    ,Address1 VARCHAR(100) 
    ,City VARCHAR(50) 
    ,State VARCHAR(2) 
    ,Zip VARCHAR(5) 
    ,LastName VARCHAR(50) 
    ) 

をしかし、それは構文エラーを与える:

私はこれを試してみました。

今のところ、別のint列をテーブル変数に追加し、それをID列と@IdentitySeedの合計で更新しましたが、更新なしでこれを行う方法を探したいと思います。

答えて

7

あなたは使用してIDENTITY列の現在の値を確認することができます

DBCC CHECKIDENT (#HH, RESEED, 42) 

を、それはまたのための変数で動作します新しい値:それは、ローカルおよびグローバル一時表のために働く

DBCC CHECKIDENT (#HH, RESEED, @IdentitySeed) 

(すなわちCREATE TABLE #HH (...)またはCREATE TABLE ##HH (....) - 申し訳ありませんが、あなたがテーブル変数でこれを行うことができないようだ

:-(テーブル変数で動作するようには思えない.....

3

私はこれを行うことができると信じていますが、動的SQLで行う必要があります - 動的SQLでtableVarを宣言し、そこにも使用してください!

1で起動し、MAX(HHRecId)+ IDとして計算されるセカンダリIDフィールドを持っていれば、確かに簡単で高速なコードになります。

DBCC CHECKIDENT (#HH) 

ます。また、使用している、後で変更することができます:

2

私は次のことをやってしまいました:

DECLARE @NewId INT 

SELECT @NewId = MAX(ID) FROM MyIDSTable 

DECLARE @MyTempData TABLE (
    Id int not null primary key 
    ,Field1 int not null 
    ,Field2 nvarchar(25) not null 
    ,Field3 datetime 
) 

INSERT INTO @MyTempData 
SELECT ROW_NUMBER() OVER (Order by [C].[Cancel_id] ASC) + @NewId -1 [RowNum] 
     ,Field1 
     ,Field2 
     ,Field3 

INSERT INTO MyTable SELECT * FROM @MyTempData 

UPDATE MYIDSTable SET ID = (SELECT MAX(ID) FROM @MyTempData) + 1 WHERE Name = 'Something' 

はあなた

ありがとう
関連する問題