をインクリメントしません。 NVARCHAR
自動で新しいレコードのテストの挿入のための手順を作成Idを自動インクリメントvarchar型は、私は私の主キーとして<code>VARCHAR</code>列を使用しています
CREATE TABLE TESTING
(
ID VARCHAR(10),
NAME VARCHAR(15),
DESCP VARCHAR(50)
);
:私は自動インクリメントそれ(ベース62、大文字/小文字、数字)、ただし、以下のコードは、(明白な理由のために)失敗したいです-incremented ID:
CREATE PROCEDURE SP_INSERT
@NAME VARCHAR(MAX), @DESCP VARCHAR(MAX)
AS
BEGIN
/* Logic for getting new ID as per the NAME with PRE FIX */
DECLARE @NEWID VARCHAR(5);
DECLARE @PREFIX VARCHAR(10);
SET @PREFIX = UPPER(SUBSTRING('STR', 1, 3))
SELECT @NEWID = (@PREFIX + replicate('0', 3 - len(CONVERT(VARCHAR, N.OID 1))) + CONVERT(VARCHAR, N.OID + 1))
FROM
(SELECT
CASE
WHEN MAX(T.TID) IS NULL
THEN 0 ELSE MAX(T.TID)
END AS OID
FROM
(SELECT SUBSTRING(ID, 1, 1) AS PRE_FIX,
SUBSTRING(ID, 2, LEN(ID)) AS TID
FROM Testing) AS T
WHERE
T.PRE_FIX = @PREFIX) AS N
/* INSERT QUERY FOR NEW RECORD */
INSERT INTO Testing VALUES (@NEWID, @NAME, @DESCP)
END
私は値を挿入しよう:
SP_INSERT 'svce','YOUR MANAGEMENT DESCRIPTION';
今回初めて、再度同じIDを取得するためにインセットを試みますが、インクリメントされません。
同様:
ID Name
------------
SVC001 SVCE
SVC001 Svce
です。ホイールを再発明するときは、常に問題が発生します。単純なint ID列を主キーとして使用するか、行ごとに一意の列の組み合わせを使用します。選択または計算列としてvarchar値を作成します。 –
ほとんどの場合、プライマリキーにはテーブルのクラスタ化インデックスがあることに注意してください。パフォーマンスのためには、クラスタ化インデックスをできるだけ小さく保つことがベストプラクティスです。 – shadow