2016-11-10 16 views
-2

私は、SQL Serverで自動インクリメントにdecimalで2014年SQL Serverの:自動インクリメント10進数の列

+6

まずオフの小さな抽出物が...なぜ創造と外部テーブルのupdationましたか?第二に、DPは何人ですか?サンプルデータを提供してください。 – JohnHC

+1

このエラーメッセージが表示されました: 'ID列 'D'は、int型、bigint型、smallint型、tinyint型、または小数点以下の桁数でスケールが0で、ナルナブルでないことが制約されている必要があります。 ' –

+0

@JohnHC自動的に生成されるバージョン番号を与えます。例:1.0、2.0 ,. 。 。 –

答えて

0

私の実際の要件は、私のストアドプロシージャの呼び出しごとにバージョン番号を生成することです。私はこれを以下のように実装しました。

create table version(no decimal(2,2)) insert into version(1.0)

以下は私のストアドプロシージャ

Update version set no=(select max(no) from version)+1

select no.version,t.* from table t left join version

0

宣言を10進数の列が必要ですが、あなただけの選択整数形式で取得します。

CREATE TABLE #Record(id decimal(18,0) identity primary key , name VARCHAR(100)) 
INSERT INTO #Record(name)SELECT 'name1' UNION ALL SELECT 'name2' SELECT * FROM #Record 
1

あなたが達成したいのかを教えなければならないが、計算され、自動インクリメントノーマル(整数)列に接続されているとして、自動インクリメント進列をエミュレートするための1つの方法は、それを定義することです。例えば:

定義:

create table AutoincrementDecimalTest 
(
    Id INT NOT NULL IDENTITY(1, 1), 
    SomeText NVARCHAR(200) NOT NULL, 
    -- you may declare it as persisted, if the extra space is not problem 
    AutoincrementDec AS CAST(Id * 0.2 AS NUMERIC(18, 2)) 
) 

hereを指摘したようにもちろん、いくつかの制限は、どのようなあなたの表現のために適用されます。

テスト:

insert into AutoincrementDecimalTest (SomeText) VALUES ('test1'), ('test2') 
GO 

select * from AutoincrementDecimalTest 
GO 
+0

ありがとうございます。私の実際の要件は、私のロジックの反復ごとにバージョン番号を生成することです。私は以下のようにこれを達成しました。 は1.0 'DECIMAL(5,2)@var を設定する@ VAR = 1.0' を宣言してから、私のロジックのループの中で、私は、@のヴァール+ 1に設定していると10進変数を開始しました。 ' Set @ var = @ var + 1 print @var' –

+0

あなたの解決策はうまくいくかもしれませんが、セットベースの言い方で考えるべきです - 自動生成による一度に複数の挿入がwhileループで一回の挿入よりもはるかに速いかもしれません。 – Alexei

関連する問題