2011-11-12 8 views
2

私はSPでtempテーブルを持っています。テーブルのIDを作成する際の変数

CREATE TABLE #bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(1, 1) 
      ) 

私も、私が欲しい変数@nextseq が

CREATE TABLE #bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(@nextseq, 1) 
      ) 

以下のようsomthinghありましたが、SQL Serverがこの.ANYソリューションを許可しませんか?

+0

は、おそらくあなたは、あなたが解決しようとしている「実際の」問題を投稿する必要があります。 row_number()ソリューションのような臭いが... –

答えて

2

あなたは

DBCC CHECKIDENT (#bclist, RESEED, @nextseq) 

を使用することができますしかし、あなたのSPはのdbownerから実行されていない場合、それは動作しません。 もう1つのことは、テーブルを再シードすることです。

if @nextseq > 1 
     begin 
       TRUNCATE table #bclist 
      SET IDENTITY_INSERT #bclist ON 
      INSERT INTO #bclist (seq) 
      VALUES (@nextseq-1) 
      SET IDENTITY_INSERT #bclist OFF 
      DELETE FROM #bclist 
     End 

あなた以降にそうであれば条件を忘れてはいけないあなたがグローバルな一時テーブルについて2の代わりに、1

0

方法から値を取得しますcoulmn?

DECLARE @foo varchar(5); 
SET @foo = '4'; 

DECLARE @query nvarchar(max); 

-- a global temp table will exist for the lifetime of 
-- the connection 
SET @query = replace(N' 
CREATE TABLE ##bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(@seed, 1) 
      )', '@seed', @foo) 

EXECUTE(@query) 

INSERT INTO 
    ##bclist 
SELECT 0,1,2,3 
select * from ##bclist 

drop table ##bclist 

結果

bcastid userid etype articles0 seq 
0   1  2  3   4 
関連する問題