我有一个Microsoft SQL Server数据库,其中包含一个名为tblCABLE
的表,其中包含以下两个相关列:
ID - indentity
CableID - nchar(8) not null
我在该表上创建了After Insert
触发器,当输入tblCABLE
的所有列时,它运行正常。
我正在尝试在访问中创建一个前端表单,以便将数据输入到tblCABLE
,以便触发器可以在新行上运行。
我的问题是,我希望在Access中打开新记录表单时自动填充CableID
列,但不知道如何执行此操作。
我编写了一些SQL代码,它将生成新的CableID
,如下所示(问题是如何将其添加到Access中的新记录表单上运行
declare @newcableID nchar(8)
declare @cableIDnum int
declare @maxcableID nchar(8)
set @maxcableID = (select max(cableid) from tblCable)
set @cableIDnum = (convert(int, substring(@maxcableID,3,8)))
set @cableIDnum = @cableIDnum + 1
set @newcableID = (select 'CA' + right('000000' + cast((@cableIDnum) as varchar),6))
非常感谢任何帮助。
答案 0 :(得分:0)
请不要这样做!使用SELECT MAX()+1
方法本质上是错误,会在加载时破坏并产生重复值。
让SQL Server数据库使用类型为INT IDENTITY
的列来处理此问题 - 类似于:
CREATE TABLE dbo.tblCable
(ID INT IDENTITY(1, 1) NOT NULL
CONSTRAINT PK_tblCable PRIMARY KEY CLUSTERED,
...(other columns here).....
)
这样,SQL Server保证正确处理ID
值 - 一旦你插入了一个新行,ID
将是一个唯一的有效数字,你不必乱搞乱七八糟自己创造这个独特的身份。
如果您需要使用固定前缀连接数字ID
值的列,请使用计算列:
ALTER TABLE dbo.tblCable
ADD CableID AS 'CA' + RIGHT('000000' + CAST(ID AS VARCHAR(6)), 6) PERSISTED
你已经完成了!每当您插入新行时,SQL Server将为您提供唯一的ID
(例如42),并且您的CableID
列将自动包含CA000042