1

我试图使用存储过程来填充AspNetUsers表中插入用户,但我得到以下错误:不能在AspNetUsers表

Msg 515, Level 16, State 2, Procedure Insert_Users, Line 36 Cannot insert the value NULL into column 'Id', table 'MyDatabase.dbo.AspNetUsers'; column does not allow nulls. INSERT fails.

我读了一些其他职位,应该有以下属性列Id:[DatabaseGenerated(DatabaseGeneratedOption.Identity)],但我无法找到实际声明的位置。

我不想手动插入所有用户,因为我没时间了,我需要尽快完成。

BEGIN 
SET NOCOUNT ON; 
DECLARE @id uniqueidentifier 
DECLARE @email nvarchar(256) 
DECLARE @emailconfirmed bit 
SET @emailconfirmed = 0 
DECLARE @twofactorenabled bit 
SET @twofactorenabled = 0 
DECLARE @lockoutenabled bit 
SET @lockoutenabled = 1 
DECLARE @accessFailed bit 
SET @accessFailed = 1 
DECLARE @username nvarchar(256) 
DECLARE @fname nvarchar(50) 
DECLARE @lname nvarchar(50) 

DECLARE @athleteKey int 
SET @athleteKey = 41809 

DECLARE @atheletsCount int 
SET @atheletsCount = 0; 
SET @atheletsCount = (SELECT COUNT(*) FROM [BIBD].[dbo].[Athlete]) 

WHILE @athleteKey < @atheletsCount 
    SET @id = NEWID() --Line 36 
    print CAST(@id AS nvarchar(128)) 
    SET @fname = (SELECT FirstName FROM [BIBD].[dbo].[Athlete] where [email protected]) 
    SET @lname = (SELECT LastName FROM [BIBD].[dbo].[Athlete] where [email protected]) 
    SET @username = CONCAT(LOWER(@fname),'.',LOWER(@lname)) 
    SET @email = CONCAT(LOWER(@fname), '.', LOWER(@lname), '@gmail.com') 

    INSERT INTO [MyDatabase].[dbo].[AspNetUsers] 
     (Id 
     ,Email 
     ,EmailConfirmed 
     ,[TwoFactorEnabled] 
     ,LockoutEnabled 
     ,AccessFailedCount 
     ,UserName 
     ,FirstName 
     ,LastName) 
    VALUES 
      (CAST(@id AS nvarchar(128)) 
      ,@email 
      ,@emailconfirmed 
      ,@twofactorenabled 
      ,@lockoutenabled 
      ,@accessFailed 
      ,@username 
      ,@fname 
      ,@lname) 

    IF @athleteKey % 5 = 0 
     INSERT INTO [MyDatabase].[dbo].[AspNetUserRoles] 
        (UserId,RoleId) VALUES (@id, 3) 
    ELSE 
     INSERT INTO [MyDatabase].[dbo].[AspNetUserRoles] 
        (UserId,RoleId) VALUES (@id, 4) 

    SET @athleteKey = @athleteKey+1 
END 
+0

什么是您的存储过程? – ESG

+0

什么是id的列数据类型? – Ian

+0

@I nvarchar(128) – user1012732

回答

0

在WHILE循环中需要BEGIN-END。
否则它只是不分配值给@id并且不处理循环