Tsql 在isql中创建特定于表的id

Tsql 在isql中创建特定于表的id,tsql,Tsql,我的公司为数据库中的每个表生成不同的可读id,格式为[prefix]-[incrementing id] i、 e 存货=>INV-0001,INV-0002;增量的 产品=>PROD-0001、PROD-0002、PROD-0003;增量的 我面临的问题是,ID是用c代码生成的,而不是由数据库生成的,因此很难通过触发器将新记录插入数据库。我正在寻找一种方法来帮助我解决这个问题。将ID生成封装到一个或多个存储过程中,并从客户端和T-SQL端使用它们 -- ====================

我的公司为数据库中的每个表生成不同的可读id,格式为[prefix]-[incrementing id]

i、 e

存货=>INV-0001,INV-0002;增量的 产品=>PROD-0001、PROD-0002、PROD-0003;增量的


我面临的问题是,ID是用c代码生成的,而不是由数据库生成的,因此很难通过触发器将新记录插入数据库。我正在寻找一种方法来帮助我解决这个问题。

将ID生成封装到一个或多个存储过程中,并从客户端和T-SQL端使用它们

-- ======================================================================
-- id table
CREATE TABLE Ids (
   Name VARCHAR(30) PRIMARY KEY CLUSTERED
   ,NextId INT NOT NULL
);
-- ======================================================================
-- init ids for Inventory
INSERT INTO Ids VALUES('Inventory', 1);
GO
-- ======================================================================
-- general procedure to allocate new ids
ALTER PROCEDURE AllocateIds
   @nextId INT OUTPUT
   ,@name VARCHAR(30)
   ,@count INT
AS
SET NOCOUNT ON;

UPDATE Ids SET
   @nextId = NextId
   ,NextId += @count
WHERE Name = @name
GO
-- ======================================================================
-- special procedure to get new inventory ids
ALTER PROCEDURE GetInventoryId
   @inventoryId VARCHAR(30) OUTPUT
AS
SET NOCOUNT ON;

DECLARE @nextId INT;
EXECUTE AllocateIds @nextId OUTPUT, 'Inventory', 1;

SET @inventoryId = 'INV-' + REPLICATE('0', 4 - LEN(CAST(@nextId AS VARCHAR(20)))) + CAST(@nextId AS VARCHAR(20));
GO
-- ======================================================================
-- sample usage
DECLARE @inventoryId VARCHAR(30);
EXECUTE GetInventoryId @inventoryId OUTPUT;
PRINT @inventoryId;

这是一种糟糕的方法,将类型代码与标识符混合在一起。它们应该是独立的列。