无法更新时间戳列

时间:2019-01-22 20:50:49

标签: sql stored-procedures sql-server-2012 syntax-error

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

 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]

我遇到错误

  

无法更新时间戳列

我不明白为什么。

有什么主意吗?

1 个答案:

答案 0 :(得分:5)

timestamp不是您想的那样。它是行地址的某种内部表示。 Here是一种解释。

使用datetimedatetime2来解决问题。

这更加令人困惑,因为CURRENT_TIMESTAMP不会返回时间戳。