无法更新时间戳列

dol*_*_do 0 sql stored-procedures syntax-error sql-server-2012

我建议使用以下存储过程来审核登录表.

 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
Run Code Online (Sandbox Code Playgroud)

但是我无法让它解决一些我无法弄清楚的语法错误.

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)
)
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

无法更新时间戳列

我不明白为什么.

任何的想法?

Gor*_*off 5

timestamp不是你想的那样.它是行地址的某种内部表示. 是一个解释.

使用datetimedatetime2解决您的问题.

这使得更加混乱,因为CURRENT_TIMESTAMP不返回时间戳.