31

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

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

4

9 に答える 9

38
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 つだけ作成できます。

于 2008-12-08T10:46:09.307 に答える
20

SQL Server 2012 を使用する場合は、デフォルト値で 2 番目の列に Sequence を使用できます

--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

于 2014-04-02T14:13:38.317 に答える
8

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

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

于 2011-05-21T08:44:02.423 に答える
3

いいえ、複数のID列を持つことはできません。

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

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

于 2011-05-29T15:35:09.220 に答える
2
create table #tblStudent
(
    ID int primary key identity(1,1),
    Number UNIQUEIDENTIFIER DEFAULT NEWID(),
    Name nvarchar(50)
)

ID 列を 2 つ使用することはできませんが、一意の ID 列を使用することを受け入れる場合、このコードも同じように機能します。また、値を挿入するための追加の列 (名前列) も必要です。

使用例:

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

select * from #tblStudent

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

于 2012-08-23T19:58:11.563 に答える
1

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

2 つの ID 列を持つことはできません。

トリガーを使用して、必要なものに近いものを取得できます...

于 2008-12-08T10:35:37.627 に答える
0

SQL Server では、ID として複数の列を持つことはできません。

于 2008-12-08T10:34:25.120 に答える
-1

回避策は、カウンターをインクリメントする INSERT トリガーを作成することです。

したがって、1 つの ID 列 (applicationstatusid) を持つテーブルがあります。それも主キーです。別の col: applicationnumber を自動インクリメントしたい

これが私が書くトリガーです。

 create trigger [applicationstatus_insert] on [ApplicationStatus] after insert as 
       update [Applicationstatus] 
       set [Applicationstatus].applicationnumber =(applicationstatusid+ 4000000) 
       from [Applicationstatus] 
       inner join inserted on [applicationstatus].applicationstatusid = inserted.applicationstatusid
于 2014-09-17T19:42:43.820 に答える