建议我使用以下存储过程来审核登录表。
CREATE PROCEDURE ApplicationLogin
@Username NVARCHAR(255),
@IpAddress NVARCHAR(255)
AS
BEGIN
DECLARE @UserID INT;
BEGIN TRANSACTION;
SET @UserID = (SELECT UserID FROM User WHERE Username = @Username);
IF @UserID > 0
BEGIN
UPDATE User
SET LastLogin = GETDATE()
WHERE UserID = @UserID;
END
INSERT INTO UserLogger (Username, UserID, TimeStamp)
VALUES (@Username, @UserID, @Timestamp);
COMMIT TRANSACTION;
SELECT @UserID
END
但是,对于某些我不知道的语法错误,我无法使其正常运行。
User
表如下所示:
CREATE TABLE [dbo].[User]
(
[UserID] [INT] IDENTITY(1,1) NOT NULL,
[UserName] [VARCHAR](50) NOT NULL,
[Enabled] [BIT] NOT NULL,
[LastLogin] [TIMESTAMP] NOT NULL,
PRIMARY KEY CLUSTERED ([UserID] ASC)
)
Audit
表如下所示:
CREATE TABLE [dbo].[UserLogger]
(
[UserID] [INT] IDENTITY(1,1) NOT NULL,
[UserName] [VARCHAR](50) NOT NULL,
[Name] [VARCHAR](100) NULL,
[TS] [TIMESTAMP] NULL,
[IpAddress] [NCHAR](10) NULL
) ON [PRIMARY]
我遇到错误
无法更新时间戳列
我不明白为什么。
有什么主意吗?
答案 0 :(得分:5)
timestamp
不是您想的那样。它是行地址的某种内部表示。 Here是一种解释。
使用datetime
或datetime2
来解决问题。
这更加令人困惑,因为CURRENT_TIMESTAMP
不会返回时间戳。