【问题标题】:Getting error: Cannot insert the value NULL into column 'entryID'出现错误:无法将值 NULL 插入“entryID”列
【发布时间】:2016-03-28 14:13:32
【问题描述】:

usp_auditRejectRequest:

CREATE PROCEDURE [a01].[usp_auditRejectRequest]
(@accountID UNIQUEIDENTIFIER , @GroupID UNIQUEIDENTIFIER)
AS
BEGIN
    INSERT INTO [a01].[tbl_enrollmentAudits]
        (entryID,entryDate, requestID, accountID, groupID, accepted, reason)
    VALUES( NULL,SYSDATETIMEOFFSET(), NULL, @accountID, @GroupID, 0, NULL);
END
GO

usp_auditAcceptRequest:

CREATE PROCEDURE [a01].[usp_auditAcceptRequest]
(@accountID UNIQUEIDENTIFIER , @GroupID UNIQUEIDENTIFIER)
AS
BEGIN
    INSERT INTO [a01].[tbl_enrollmentAudits]
        ( entryID,entryDate, requestID, accountID, groupID, accepted, reason)
    VALUES( NULL,SYSDATETIMEOFFSET(), NULL, @accountID, @GroupID, 1, NULL);
END
GO

usp_addRequest:

CREATE PROCEDURE [a01].[usp_addRequest]
(@AccountID UNIQUEIDENTIFIER, @GroupID UNIQUEIDENTIFIER)
AS
BEGIN
    SET NOCOUNT ON

    IF ([a01].[udf_isUserActive](@AccountID) = 0)
    BEGIN
        EXECUTE [a01].[usp_auditRejectRequest]
            @AccountID, @GroupID

        RETURN;
    END;

    IF ([a01].[udf_isUserBlockedFromGroup](@GroupID)=0)
    BEGIN
        EXECUTE [a01].[usp_auditRejectRequest]
             @AccountID, @GroupID

        RETURN;
    END;
END;
GO

输出:添加一个非活动用户:

    BEGIN
    DECLARE @AccountID UNIQUEIDENTIFIER;
    DECLARE @GroupID UNIQUEIDENTIFIER;


    (SELECT @AccountID = accountID 
    FROM [a01].[tbl_userAccounts] WHERE accountUsername='adrianab');

    (SELECT @GroupID = groupID FROM [a01].[tbl_groups] WHERE groupName LIKE '%Foo%');

    EXECUTE [a01].[usp_addRequest] @AccountID, @GroupID;
END;
GO

我不能再声明任何 UNIQUE IDENTIFIed,accountId 和 groupID 是我唯一可以按照讲师的指示使用的。

【问题讨论】:

  • 当我使用 2 个参数时,另一个错误消息显示“无法将空值插入 entryID”。我想 AS entryID 是一个 PK!错误消息:“无法将值 NULL 插入到列 'entryID',表 tbl_enrollmentAudits';列不允许空值。插入失败
  • 原问题回答完毕后,请勿将问题更改为新问题。发布的已接受答案是针对第一个问题的,因此除非有人查看编辑历史记录,否则这将毫无意义。

标签: sql-server tsql stored-procedures


【解决方案1】:
   EXECUTE [a01].[usp_auditRejectRequest]
         NULL,NULL,NULL,@AccountID,@GroupID,0,'User not active'

usp_auditRejectRequest 过程只定义了 2 个参数时,它调用了 7 个参数。要么向你的过程添加更多参数(你说你不能这样做),要么只是用 2 调用它并将“原因”值移动到存储过程中:

    EXECUTE [a01].[usp_auditRejectRequest]
         @AccountID,@GroupID

【讨论】:

  • 当我使用 2 个参数时,另一个错误消息显示“无法将空值插入 entryID”。我想 AS entryID 是一个 PK!错误消息:“无法将值 NULL 插入到列 'entryID',表 tbl_enrollmentAudits';列不允许空值。插入失败。”
  • entryID 会自动设置吗?然后不要在您的字段列表中。如果不是,则将其设置为有效的非空值。
  • entryID 是 UNIQUEIDENTIFIER,“有效”是什么意思?
  • 这不能回答问题 - 插入新记录时它是否会自动设置为一个值?如果没有,只需使用newid() 生成一个新的非空值。
  • 好的,将entryID设置为NEWID()后就可以了,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多