1

我有一个 Microsoft SQL Server 数据库,其中包含一个名为tblCABLE以下两个相关列的表:

ID - indentity
CableID - nchar(8) not null

After Insert我在我写的那个表上有一个触发器,当tblCABLE输入所有列时它运行良好。

我正在尝试创建一个前端表单来访问数据输入,tblCABLE以便触发器可以在新行上运行。

我的问题是我希望CableID在 Access 中打开新记录表单时自动填充列,但不知道如何执行此操作。

我已经编写了一些 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))

任何帮助将不胜感激。

4

1 回答 1

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 来摆弄和弄乱。

如果您需要将数值ID与固定前缀连接的列,请使用计算列

ALTER TABLE dbo.tblCable
ADD CableID AS 'CA' + RIGHT('000000' + CAST(ID AS VARCHAR(6)), 6) PERSISTED

你就完成了!每当您插入新行时,SQL Server 都会给您一个唯一的ID(例如 42),并且您的CableID列将自动包含CA000042

于 2013-07-01T08:30:44.980 回答