我有一个现有的 VFP 数据库(dbf 文件),我想将它迁移到 SQL Server 2008。
问题是 :
我的 VFP 数据库中的表«发票»具有以下格式的主键:
year+counter
例如:对于 2013 年 --> 201300001、201300002、…、20130000n 对于 2012 年 --> 201200001、201200002、201200003、…..20120000n 等。
计数器必须在每年年初重置
为了计算这些序列,我从另一个 dbf 表中得到一个计数器,我将其递增并保存。在这里,我必须注意冲突和重复键的风险。我听到了很多关于身份列以及它如何避免我并发的信息。因为 sql 本身负责计算标识列。
根据所说,是否有解决方案?
谢谢你。
嗨 user2511414,我尝试了代替触发器,如下所示:
CREATE TRIGGER AutoIncrement_Trigger ON dblease.dbo.testAutoinc
instead OF INSERT AS
BEGIN
DECLARE @ach CHAR
DECLARE @ch CHAR
DECLARE @num INT
DECLARE @an INT
SET @an = year(GetDate())
SET @ach = Convert(char(4),@an)
select @num = SUBSTRING(MAX(id),5,5) FROM dblease.dbo.testAutoinc having SUBSTRING(MAX(id),1,4) = @ach
INSERT INTO dblease.dbo.testAutoinc (id,designation,date) SELECT (@ach+CONVERT(VARCHAR(6),(@num+1))),inserted.designation, GetDate() FROM inserted
END
但是当执行以下查询时:
insert into testAutoinc (designation, date) values ('TEST','25/06/2013');
我收到以下错误:无法将值 NULL 插入“Id”列,表“dblease.dbo.testAutoinc”;列不允许空值。插入失败。该语句已终止。