我使用 MS Access Database 2013 作为前端连接到 MS SQL Server 2017。
Dim rst As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim conn As New ADODB.Connection
With conn
.CursorLocation = adUseClient
.ConnectionString = strSQLOLEDB
.Open
End With
cmd.CommandType = adCmdStoredProc
cmd.CommandText = strStoredProcedure
cmd.ActiveConnection = conn
cmd.CommandTimeout = 120
cmd.Parameters.Append cmd.CreateParameter(strID_Bez, adInteger, adParamInput, , intID)
rst.Open cmd, , adOpenKeyset, adLockOptimistic
这对我来说很好,我也可以使用触发器将更改的日期/时间设置为手动时间戳:
CREATE TRIGGER [dbo].[tr_Emailadress_After_Update]
ON [dbo].[Emailadress] AFTER Update, Insert
AS
BEGIN
SET NOCOUNT ON;
UPDATE Emailadress
SET Email_TS = sysdatetime()
WHERE Email_ID IN ( SELECT Email_ID
FROM inserted
)
现在我正在尝试使用 MS SQL Server 的 OLTP In-Memory-Technic(这也是手动时间戳的原因,因为 OLTP 不提供时间戳)并且触发器不再起作用。
我搜索了很多解决方案,发现这对我有用:
CREATE TRIGGER [dbo].[tr_Emailadress_After_Update] ON [dbo].[Emailadress] WITH NATIVE_COMPILATION, SCHEMABINDING AFTER Update , INSERT
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'german')
DECLARE @intEmail_ID int
SELECT @intEmail_ID = I.Email_ID
FROM Inserted I
UPDATE dbo.Emailadress
SET Email_TS = sysdatetime()
WHERE Email_ID = @intEmail_ID
END
GO
但现在我遇到了另一个问题。我可以更改我的访问表单中的数据,但由于触发器,更改不会被提交。没有触发器它工作正常......但没有触发器。如果我直接在 SSMS 发送更新到表触发器和更改将正常工作。如果我删除触发器访问将正常工作。
我试图改变TRANSACTION ISOLATION LEVEL
但没有找到解决问题的方法。