我正在使用VARCHAR
列作为我的主键。我想自动递增它(基地62,小写/大写,数字),但是,下面的代码失败(原因很明显):Id自动增量varchar不增量
CREATE TABLE TESTING
(
ID VARCHAR(10),
NAME VARCHAR(15),
DESCP VARCHAR(50)
);
创造一个新纪录的测试插入的过程与NVARCHAR
汽车-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标识列作为主键,要么使用每行唯一的列组合。在select中或作为计算列创建该varchar值。 –
请注意,在大多数情况下,主键具有表格的聚簇索引。为了提高性能,最好将聚集索引尽可能小。 – shadow