Не удается обновить столбец отметки времени - PullRequest
0 голосов
/ 22 января 2019

Мне была рекомендована следующая хранимая процедура для проверки таблицы входа в систему.

 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 голосов
/ 22 января 2019

timestamp не то, что вы думаете. Это своего рода внутреннее представление адреса строки. Здесь - это объяснение.

Используйте datetime или datetime2, чтобы решить вашу проблему.

Это еще более запутанно, потому что CURRENT_TIMESTAMP не возвращает отметку времени.

...