【发布时间】:2015-10-01 14:59:42
【问题描述】:
我的问题比较简单,但我还没有找到答案。我有一个只包含一行的表。这一行有两列,ClientCode 和 ClientIndex。
我有一个如下所示的选择查询:
SELECT i.ClientCode + FORMAT(i.ClientIndex, "000000") FROM Indexes as I;
现在,在我运行 select 之后,我想将 ClientIndex 加一。
UPDATE Indexes SET ClientIndex = ClientIndex + 1;
动机:我希望能够创建连续的报告编号。因此,每次生成报告时,我都希望 ClientIndex 增加。为此,我需要锁定表格,选择我的号码,增加索引并解锁表格。
这在 MS Access 2013 中是否可行?使用存储过程在 Sql 中是微不足道的;但是要求状态访问并且没有办法绕过这个要求。此外,我正在构建一个客户端应用程序(使用 .NET 和 F#),它将检索报告编号。
编辑:似乎人们并没有真正理解这个问题。我希望SELECT 和UPDATE 这两个语句在同一个执行中运行。我确实不想从某个客户端调用选择和更新。
普通旧 t-sql 中的 SP 看起来像:
CREATE PROCEDURE something
AS
BEGIN
declare @result as nchar(10);
set @result = <<select query>>;
<<update query>>;
select @result;
END
编辑:我正在构建一个 .NET F# 应用程序,它将调用 Access 数据库并检索报告编号。此应用程序将在 Windows 服务器上的 Windows 服务中运行。这个报告编号可以在很长的时间间隔内同时调用大约 100 次。
【问题讨论】:
-
您的更新声明有什么问题? (除非它没有 where 条件)
-
你为什么不直接试试?这将比写问题花费更少的时间......
-
感谢您的回复。我希望它们像“在同一条语句中”一样“在彼此之后”运行我不希望调用代码必须对数据库进行两次调用才能使其正常工作。换句话说,我希望
SELECT语句和UPDATE语句在同一个执行中运行。 -
编辑了我的问题,如果仍然不清楚,请告诉我,我可以尝试更好地解释它。但我们的想法是在单个报表中为每个报告生成一个唯一的“业务编号”。 (所以,是的,连接字符串,第一份报告得到 2015-RPT-000001 和第二份报告 2015-RPT-000002 之类的东西。我已经愚蠢地完成了数字的创建,因为这并不重要。重要的是单次执行返回一个值并更新数据库。
-
@HansUp 如果可以从 .NET 代码调用此 VBA 过程,并且如果对 VBA 脚本的 2 个并发调用执行串行,这样就不会出现合适的双数。 (当然,我希望以更“sql-y”的方式来做)-谢谢你的思考,我很感激。