1

と呼ばれるテーブルがあり、SharedNumberフィールドは1つだけです。整数と呼ばれ、LastNumberエントリは1つだけです。

このLastNumberエントリを共通の参照ポイントとして使用する、約40または50の奇数の完全に別個のAccessデータベースがあります。これは基本的に、それ自体では生成できないシステムの一意の主キーを手動で生成するために使用されます。それは醜くて厄介で、私はそれらを1つずつ徐々に切り離していく過程にありますが、その間に、この同じエントリを参照するプロセスをSQLServerで構築する必要があります。

私は以下を扱っています:

1.1。

共有番号テーブル:

create table SharedNumber
( 
    [LastNumber] int not null
) ON [PRIMARY]


Insert into SharedNumber
values
(234) --This is the most recent shared number

2.2。

InputTable新しいエントリを継続的に受信し、新しいContractIDフィールドの値を増分して手動で生成する必要がある入力データテーブル( ) LastNumber。簡単にするために、このテーブルがで一意に定義されているとしましょうName

create table InputTable
(

    [ContractID] int NULL,
    [Name] varchar(50) not null
 ) ON [PRIMARY]


Insert into InputTable
values
(101,'ABC'),
(102,'DEF'),
(NULL,'GHI'),
(NULL,'JKL'),
(NULL,'MNO')

エントリ「GHI」、「JKL」、および「MNO」にはContractID値が必要なので、に基づいてそれらの新しい番号を段階的に作成し、最後に生成された番号にLastNumber更新します。LastNumber私が望む最終的な結果は次のとおりです。

ContractID    Name
101           ABC
102           DEF
235           GHI
236           JKL
237           MNO


LastNumber
237

誰かがこれを行うための良い方法について何かアイデアがありますか?

4

2 に答える 2

2

1つのオプションは、コントラクトテーブルのDDLで直接これを行うことです。これは、2つの列と計算された列を使用します。

create table whatever (
    BuiltInContractId int identity(1000000,1) not null, -- the 1000000 is just to set a range for contract ids
    OverrideContractId int, -- what a user inputs,
    ContractId as coalesce(OverrideContractId, BuiltInContractId),
    . . .
)
于 2012-04-30T13:44:18.190 に答える
0

挿入時に代わりにトリガーを使用します。

またはさらに良い:中央の場所でアプリケーションロジックの問題を解決します。

于 2012-04-30T13:05:45.790 に答える