访问表单使用SQL Server查询/存储过程来填充字段

时间:2013-06-26 23:20:54

标签: forms ms-access stored-procedures sql-server-2008-r2

我有一个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))

非常感谢任何帮助。

1 个答案:

答案 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