web-dev-qa-db-ja.com

SQLサーバーテーブルに2つのID列を含めることはできますか?

1つの列を主キーとして、別の列を注文番号フィールドを自動インクリメントする必要があります。これは可能ですか?

編集:私は注文番号として複合番号を使用すると思います。とにかく、ありがとう。

28
William Hurst
CREATE TABLE [dbo].[Foo](
    [FooId] [int] IDENTITY(1,1) NOT NULL,
    [BarId] [int] IDENTITY(1,1) NOT NULL
)

戻り値

Msg 2744, Level 16, State 2, Line 1
Multiple identity columns specified for table 'Foo'. Only one identity column per table is allowed.

したがって、いいえ、2つのID列を含めることはできません。もちろん、主キーを自動インクリメント(ID)にすることはできません。

編集: msdn:CREATE TABLE(Transact-SQL) および CREATE TABLE(SQL Server 2000)

テーブルごとに作成できるID列は1つだけです。

34
Eugene Yokota

SQL Server 2012を使用している場合、2番目の列のシーケンスをデフォルト値で使用できます

--Create the Test schema
CREATE SCHEMA Test ;
GO

-- Create a sequence
CREATE SEQUENCE Test.SORT_ID_seq
    START WITH 1
    INCREMENT BY 1 ;
GO

-- Create a table
CREATE TABLE Test.Foo
    (PK_ID int IDENTITY (1,1) PRIMARY KEY,
    SORT_ID int not null  DEFAULT (NEXT VALUE FOR Test.SORT_ID_seq));
GO

INSERT INTO Test.Foo VALUES ( DEFAULT )
INSERT INTO Test.Foo VALUES ( DEFAULT )
INSERT INTO Test.Foo VALUES ( DEFAULT )

SELECT * FROM Test.Foo 

-- Cleanup
--DROP TABLE Test.Foo
--DROP SEQUENCE Test.SORT_ID_seq
--DROP SCHEMA Test

http://technet.Microsoft.com/en-us/library/ff878058.aspx

18
benkevich

ID列を1つ追加してから、式がID列の名前である計算列を追加します。

これで両方が同時に増加します

7
Simon Powers

いいえ、複数のID列を含めることはできません。

Enterprise Managerでは、1列以上をIDとして設定することもできません。 2番目の列がIDになったとき

また、@@ identityは開いている接続の最後のID値を返すことに注意してください。これは、テーブルで複数のID列が可能である場合は意味がありません。

3
Only333
create table #tblStudent
(
    ID int primary key identity(1,1),
    Number UNIQUEIDENTIFIER DEFAULT NEWID(),
    Name nvarchar(50)
)

2つのID列は使用できませんが、一意のID列を使用することに同意した場合、このコードは同じ働きをします。また、値を挿入するための追加の列-Name column-も必要です。

使用例:

insert into #tblStudent(Name) values('ALi')

select * from #tblStudent

Ps: NewID() 関数はタイプuniqueidentifierの一意の値を作成します。

2
Ali Karaca

主キーはID列である必要はありません。

2つのID列を含めることはできません。

あなたはトリガーであなたが望むものに近いものを得ることができます...

1
Joe Ratzer

同じテーブルに2つのIDを挿入できるコードを作成しました。それが役立つ場合に備えて、あなたとそれを共有しましょう:

create trigger UpdateSecondTableIdentity
On TableName For INSERT
as
update TableName
set SecondIdentityColumn = 1000000+@@IDENTITY
where ForstId = @@IDENTITY;

おかげで、

0
NiL

sQLサーバーでは、IDとして複数の列を持つことはできません。

0
Mladen Prajdic