sql-server - 通过将 1 添加到最后一个数据来将新数据添加到数据库
问题描述
我在数据库中有一个数据列表。我需要在状态从数据库中的“新建”更改为“使用中”后自动插入新数据,方法是在“结束范围”中添加 1 以获得下一个“开始范围”。对于结束范围,它将使用“FFFF”添加新的开始范围。范围是十六进制格式。
例如,之前的开始和结束范围是 10120000、1012FFFF。对于需要插入的下一个新范围,它将采用 1012FFFF 并加上 1。因此下一个数据的起始范围应该是 10130000。而对于结束范围,它将加上 10130000 和 FFFF 和结果是 1013FFFF。
插入的下一个范围的状态将分配为“新”。
我怎样才能为与先前范围具有相同格式的新范围执行此操作?我应该创建触发器吗?
db中的数据示例
解决方案
“顺序”是最好的解决方案
通过此脚本,您可以在 sql server 中创建序列
CREATE SEQUENCE [dbo].[Seq1] AS [bigint]
START WITH 1010
INCREMENT BY 1
MINVALUE -9223372036854775808
MAXVALUE 9223372036854775807
CACHE
GO
通过此代码,您可以获得新的价值
SELECT NEXT VALUE FOR seq1;
并插入时间
INSERT INTO TableName (StartRange)
VALUES(SELECT NEXT VALUE FOR seq1);
最后完整样本
DECLARE @StartRange varchar(4);
exec sp_executesql N'SELECT @StartRange = (NEXT VALUE FOR [dbo].seq1)', N'@StartRange int output', @StartRange = @StartRange output;
INSERT INTO TableName (StartRange, EndRange, Status)
SELECT @StartRange + '0000' AS StartRange
,@StartRange + 'FFFF' AS EndRange
,'In Use' AS Status