text: ﻿CREATE 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,
      @CurrentTimeUtc                         datetime,
      @CreateDate                             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 = @CurrentTimeUtc
  
      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,
                    LastLoginDate,
                    LastPasswordChangedDate,
                    LastLockoutDate,
                    FailedPasswordAttemptCount,
                    FailedPasswordAttemptWindowStart,
                    FailedPasswordAnswerAttemptCount,
                    FailedPasswordAnswerAttemptWindowStart )
           VALUES ( @ApplicationId,
                    @UserId,
                    @Password,
                    @PasswordSalt,
                    @Email,
                    LOWER(@Email),
                    @PasswordQuestion,
                    @PasswordAnswer,
                    @PasswordFormat,
                    @IsApproved,
                    @IsLockedOut,
                    @CreateDate,
                    @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
  
  Cleanup:
  
      IF( @TranStarted = 1 )
      BEGIN
          SET @TranStarted = 0
      	ROLLBACK TRANSACTION
      END
  
      RETURN @ErrorCode
  
  END