2016-07-27 5 views
0

私はSQL Server 2008 R2を使用しています。新しい顧客が登録されるたびに、自動生成された顧客IDを作成したいと考えています。次のように2012055001計算列を永続化する方法

私は、クエリを書かれている:顧客IDは例が

Customer ID = 
    current year (4 digit) + 
    current month (2 digit) + 
    unique number (4 digit). 

次の形式である必要があり

create table tb 
(
    id int identity(1000, 1), 
    cust_id as CONVERT(VARCHAR(4), DATEPART(YYYY, GETDATE())) + 
       SUBSTRING(CONVERT(nvarchar(6), GETDATE(), 112), 5, 2) + 
       CONVERT(VARCHAR(4), id) persisted primary key 
); 

しかし、私は次のエラー取得しています:

Computed column 'cust_id' in table 'tb' cannot be persisted because the column is non-deterministic.

この問題を解決するにはどうすればよいですか?

+1

'GETDATE'は非決定論的なので、このコンテキストでは使用できません。ですから、これは@KenWhiteが示唆するように、または挿入の前に変数に値を組み立てるようなトリガーです。 –

+0

@KenWhiteあなたはそれを答えるべきです。 – DeanOC

+0

1か月間に1,0001人の新規顧客を獲得したらどうなりますか?それをしないでください。内部テーブルの顧客IDはIDでなければならず、記述したように '視覚的な'顧客番号を生成することができます。 –

答えて

3

構造データが混乱しています。テーブル構造タイプとして作成しようとしていますが、それは明らかに機能しません。

列名はcust_idですが、列の種類は有効なSQL Serverデータ型の1つでなければなりません(この場合は固定幅であり、可能なUnicode文字がないためこの例ではCHAR(10) 。

CREATE TABLE tb(id int identity(1000, 1), cust_id Char(10)); 

あなたの自動生成されたデータは、その後、ON INSERTトリガーである可能性が最も高く、列に挿入されるだろう。 (トリガーを作成する方法は全く異なるトピックで、ほとんどのSQLチュートリアルや書籍、またはSQL Serverのドキュメントで情報を見つけることができます)

関連する問題