【问题标题】:Access form to use SQL Server query/stored procedure to populate a field访问表单以使用 SQL Server 查询/存储过程填充字段
【发布时间】:2013-06-26 23:20:53
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

  • 好的。数据库系统为 Microsoft SQL server 2008 R2。

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


【解决方案1】:

不要这样做!使用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

【讨论】:

  • 我想到了这一点,但因为我已经有数据要输入,所以我不想被 ID 字段限制,但我已经按照你提到的方式完成了这项工作并且它有效。我只会找人手动输入数据以整理电缆。感谢您的帮助。
猜你喜欢
  • 2013-02-27
  • 2019-07-01
  • 2021-03-28
  • 2021-08-31
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多