【问题标题】:Cannot update a timestamp column无法更新时间戳列
【发布时间】:2019-01-22 20:50:49
【问题描述】:

我被推荐使用以下存储过程来审核登录表。

 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]

我收到一个错误

无法更新时间戳列

我不明白为什么。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    使用datetimedatetime2 来解决您的问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2018-12-26
      • 2023-04-09
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多