0

ASPNETDB.MDF に「Today」という名前の列を設定し、現在の日時のみを入力します。getdate() を使用していますが、現在時刻を自動的に更新することはできません。ユーザーが 2013 年 1 月 5 日午後 9 時 24 分 8 秒に自分のアカウントを作成し、[今日] 列に 2013 年 1 月 5 日午後 9 時 24 分 8 秒が表示されたとします。今日の列には、2013 年 1 月 7 日午後 11 時 24 分 8 秒のような現在の時刻が入力されます。「今日」の列には、すべての行に 2013 年 1 月 7 日午後 11 時 24 分 8 秒が表示されます。

誰かが私を助けてくれたら、私は感謝します。

N:B: IMA 初心者です。ここにはさまざまな解決済みのスレッドがあると思います。既に調べましたが、どれが自分の問題に適合するのか混乱しています。この質問は面倒なので、申し訳ありません。

    ALTER PROCEDURE dbo.aspnet_Membership_CreateUser
@ApplicationName                        nvarchar(256),
@UserName                               nvarchar(256),
@Password                               nvarchar(128),
@PasswordSalt                           nvarchar(128),
@Email                                  nvarchar(256),
@PasswordQuestion                       nvarchar(256),
@PasswordAnswer                         nvarchar(128),
@IsApproved                             bit,
@DaysLeft                               numeric(18, 0),
@CurrentTimeUtc                         datetime,
@CreateDate                             datetime = NULL,
@ExpiryDate                             datetime = NULL,
@UniqueEmail                            int      = 0,
@PasswordFormat                         int      = 0,
@UserId                                 uniqueidentifier OUTPUT

AS BEGIN DECLARE @ApplicationId uniqueidentifier SELECT @ApplicationId = NULL

DECLARE @NewUserId uniqueidentifier
SELECT @NewUserId = NULL

DECLARE @IsLockedOut bit
SET @IsLockedOut = 0

DECLARE @LastLockoutDate  datetime
SET @LastLockoutDate = CONVERT( datetime, '17540101', 112 )

DECLARE @FailedPasswordAttemptCount int
SET @FailedPasswordAttemptCount = 0

DECLARE @FailedPasswordAttemptWindowStart  datetime
SET @FailedPasswordAttemptWindowStart = CONVERT( datetime, '17540101', 112 )

DECLARE @FailedPasswordAnswerAttemptCount int
SET @FailedPasswordAnswerAttemptCount = 0

DECLARE @FailedPasswordAnswerAttemptWindowStart  datetime
SET @FailedPasswordAnswerAttemptWindowStart = CONVERT( datetime, '17540101', 112 )

DECLARE @NewUserCreated bit
DECLARE @ReturnValue   int
SET @ReturnValue = 0

DECLARE @ErrorCode     int
SET @ErrorCode = 0

DECLARE @TranStarted   bit
SET @TranStarted = 0

IF( @@TRANCOUNT = 0 )
BEGIN
    BEGIN TRANSACTION
    SET @TranStarted = 1
END
ELSE
    SET @TranStarted = 0

EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @ApplicationId OUTPUT

IF( @@ERROR <> 0 )
BEGIN
    SET @ErrorCode = -1
    GOTO Cleanup
END

SET @CreateDate = DATEADD(hour, +6, @CurrentTimeUtc)
SET @ExpiryDate = DATEADD(day,365, @CreateDate)
SET @DaysLeft = DATEDIFF(day, @CurrentTimeUtc, @ExpiryDate);

SELECT  @NewUserId = UserId FROM dbo.aspnet_Users WHERE LOWER(@UserName) = LoweredUserName AND @ApplicationId = ApplicationId
IF ( @NewUserId IS NULL )
BEGIN
    SET @NewUserId = @UserId
    EXEC @ReturnValue = dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, 0, @CreateDate, @NewUserId OUTPUT
    SET @NewUserCreated = 1
END
ELSE
BEGIN
    SET @NewUserCreated = 0
    IF( @NewUserId <> @UserId AND @UserId IS NOT NULL )
    BEGIN
        SET @ErrorCode = 6
        GOTO Cleanup
    END
END

IF( @@ERROR <> 0 )
BEGIN
    SET @ErrorCode = -1
    GOTO Cleanup
END

IF( @ReturnValue = -1 )
BEGIN
    SET @ErrorCode = 10
    GOTO Cleanup
END

IF ( EXISTS ( SELECT UserId
              FROM   dbo.aspnet_Membership
              WHERE  @NewUserId = UserId ) )
BEGIN
    SET @ErrorCode = 6
    GOTO Cleanup
END

SET @UserId = @NewUserId

IF (@UniqueEmail = 1)
BEGIN
    IF (EXISTS (SELECT *
                FROM  dbo.aspnet_Membership m WITH ( UPDLOCK, HOLDLOCK )
                WHERE ApplicationId = @ApplicationId AND LoweredEmail = LOWER(@Email)))
    BEGIN
        SET @ErrorCode = 7
        GOTO Cleanup
    END
END

IF (@NewUserCreated = 0)
BEGIN
    UPDATE dbo.aspnet_Users
    SET    LastActivityDate = @CreateDate
    WHERE  @UserId = UserId
    IF( @@ERROR <> 0 )
    BEGIN
        SET @ErrorCode = -1
        GOTO Cleanup
    END
END

INSERT INTO dbo.aspnet_Membership
            ( ApplicationId,
              UserId,
              Password,
              PasswordSalt,
              Email,
              LoweredEmail,
              PasswordQuestion,
              PasswordAnswer,
              PasswordFormat,
              IsApproved,
              IsLockedOut,
              CreateDate,
              ExpiryDate,
              DaysLeft,
              LastLoginDate,
              LastPasswordChangedDate,
              LastLockoutDate,
              FailedPasswordAttemptCount,
              FailedPasswordAttemptWindowStart,
              FailedPasswordAnswerAttemptCount,
              FailedPasswordAnswerAttemptWindowStart )
     VALUES ( @ApplicationId,
              @UserId,
              @Password,
              @PasswordSalt,
              @Email,
              LOWER(@Email),
              @PasswordQuestion,
              @PasswordAnswer,
              @PasswordFormat,
              @IsLockedOut,
              @IsLockedOut,
              @CreateDate,
              @ExpiryDate,
              @DaysLeft,
              @CreateDate,
              @CreateDate,
              @LastLockoutDate,
              @FailedPasswordAttemptCount,
              @FailedPasswordAttemptWindowStart,
              @FailedPasswordAnswerAttemptCount,
              @FailedPasswordAnswerAttemptWindowStart )

IF( @@ERROR <> 0 )
BEGIN
    SET @ErrorCode = -1
    GOTO Cleanup
END

IF( @TranStarted = 1 )
BEGIN
    SET @TranStarted = 0
    COMMIT TRANSACTION
END

RETURN 0

掃除:

IF( @TranStarted = 1 )
BEGIN
    SET @TranStarted = 0
    ROLLBACK TRANSACTION
END

RETURN @ErrorCode

終わり

4

1 に答える 1

2

「今日」の列に現在の時刻を入力したい...すべての行に。

getdate()クエリで直接使用datediff()し、日付間の差を計算するために使用します。

select Column1,
       Column2,
       getdate() as Today,
       datediff(day, getdate(), ExpiryDate) as DaysLeft
from YourTable

現在の日付と時刻は常に変化しており、 を使用して簡単に照会できるため、テーブルに現在の日付と時刻を保持しても意味がありませんgetdate()

于 2013-01-07T13:07:39.750 に答える