web-dev-qa-db-ja.com

UID12345678のようなSQLで一意のIDを自動的に生成する方法は?

定義済みのコードを添付した一意のIDを自動的に生成したい。

例:

UID12345678
CUSID5000

uniqueidentifierデータ型を試しましたが、ユーザーIDに適さないIDを生成しました。

誰か提案がありますか?

10
Nishantha

私の意見で唯一の実行可能な解決策は

  • ID INT IDENTITY(1,1)列は、SQL Serverが数値の自動増分を処理できるようにします
  • 計算され、永続化された列は、その数値を必要な値に変換します

だからこれを試してください:

CREATE TABLE dbo.tblUsers
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED,
   .... your other columns here....
  )

これで、tblUsersまたはIDの値を指定せずにUserIDに行を挿入するたびに:

INSERT INTO dbo.tblUsersCol1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

sQL Serverは自動的かつ安全にID値を増やし、UserIDUID00000001UID00000002、......など-自動的に、安全に、確実に、重複なし。

更新:UserIDcomputed-しかしまだOF COURSEにはデータ型があります。オブジェクトエクスプローラーの結果:

enter image description here

29
marc_s
CREATE TABLE dbo.tblUsers
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED, 
    [Name] VARCHAR(50) NOT NULL,
)

marc_s's Answer Snap

marc_sの回答スナップ

2
Nishantha

Idを手動で追加したい場合

PadLeft()またはString.Format()メソッド。

string id;
char x='0';
id=id.PadLeft(6, x);
//Six character string id with left 0s e.g 000012

int id;
id=String.Format("{0:000000}",id);
//Integer length of 6 with the id. e.g 000012

次に、UIDを追加できます。

0
Nishantha

参照: https://docs.Microsoft.com/en-us/sql/t-sql/functions/newid-transact-sql?view=sql-server-2017

-uniqueidentifierデータ型にNEWIDを使用してテーブルを作成します。
CREATE TABLE cust

CustomerID uniqueidentifier NOT NULL
DEFAULT newid()、
Company varchar(30)NOT NULL、
ContactName varchar(60)NOT NULL、
Address varchar(30)NOT NULL、
City varchar(30)NOT NULL、
StateProvince varchar(10)NULL、
PostalCode varchar(10)NOT NULL、
CountryRegion varchar(20)NOT NULL、
Telephone varchar(15)NOT NULL、
Fax varchar(15)NULL
);
GO
-custテーブルに5行を挿入します。
カストを挿入
(CustomerID、Company、ContactName、Address、City、StateProvince、
郵便番号、CountryRegion、電話、ファックス)
VALUES
(NEWID()、「Wartian Herkku」、「Pirkko Koskitalo」、「Torikatu 38」、「Oulu」、NULL、
「90110」、「フィンランド」、「981-443655」、「981-443655」)
、(NEWID()、「Wellington Importadora」、「Paula Parente」、「Rua do Mercado、12」、「Resende」、「SP」、
'08737-363'、 'Brasil'、 '(14)555-8122'、 '')
、(NEWID()、「Cactus Comidas para Ilevar」、「Patricio Simpson」、「Cerrito 333」、「Buenos Aires」、NULL、
'1010'、 'Argentina'、 '(1)135-5555'、 '(1)135-4892')
、(NEWID()、「Ernst Handel」、「Roland Mendel」、「Kirchgasse 6」、「Graz」、NULL、
'8010'、 'Austria'、 '7675-3425'、 '7675-3426')
、(NEWID()、「Maison Dewey」、「Catherine Dewey」、「Rue Joseph-Bens 532」、「Bruxelles」、NULL、
「B-1180」、「ベルギー」、「(02)201 24 67」、「(02)201 24 68」);
GO

0
Julius Depulla