【问题标题】:Cannot insert the value NULL into column '', table column does not allow nulls. INSERT fails无法将值 NULL 插入列“”,表列不允许空值。插入失败
【发布时间】:2013-09-23 10:06:33
【问题描述】:

代码:

ALTER PROCEDURE [dbo].[SP_LMS_dealerorusercreation_IUDS]
@dealrid bigint,
@rid bigint,
@stateid bigint,
@regonid bigint,
@Locid bigint,
@pid varchar(MAX),
@address varchar(max),
@dealrname varchar(25),
@landno bigint,
@mobno bigint,
@altcontno bigint,
@email varchar(35),
@desig varchar(25),
@reporting varchar(30),
@status int,
@action varchar(10),
@CompanyId Uniqueidentifier

AS
DECLARE @TranStatus VARCHAR(5)
 BEGIN TRY
    BEGIN TRANSACTION
      IF(@action='Insert')
         BEGIN
          INSERT INTO LMS_dealerorusercreation(
rid,
stateid,
regonid,
Locid,
addres,
dealrname,
landno,
mobno,
altcontno,
email,
desig,
reporting,
status,
CompanyId
)
VALUES(
@rid,
@stateid,
@regonid,
@Locid,
@address,
@dealrname,
@landno,
@mobno,
@altcontno,
@email,
@desig,
@reporting,
@status,
@CompanyId
)
SELECT @dealrid = dealrid FROM LMS_dealerorusercreation WHERE mobno = @mobno AND email = @email
EXEC [dbo].[SP_LMS_SetDealerProductMapping]
@dealerId = @dealrid,
@prodid = @pid
SET @TranStatus='TRUE';
END       

IF(@action='Update')
     BEGIN
    UPDATE LMS_dealerorusercreation set rid= @rid,
    stateid=@stateid,
    regonid=@regonid,
    Locid=@Locid,
    addres=@address,
    dealrname=@dealrname,
    landno=@landno,
    mobno=@mobno,
    altcontno=@altcontno,
    email=@email,
    desig=@desig,
    reporting=@reporting,
    status=@status
    WHERE dealrid=@dealrid

SET @TranStatus='TRUE';       
    END              
    IF(@action='Delete')
    BEGIN
    DELETE FROM LMS_dealerorusercreation WHERE dealrid=@dealrid
    SET @TranStatus='TRUE';
    END
    COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
    ROLLBACK TRANSACTION
    DECLARE @AI VARCHAR(MAX)
    DECLARE @EM VARCHAR(MAX);
    SET @AI = 'Not Provided'
    SET @EM = ERROR_MESSAGE();
    EXEC USP_SetException 
    @ExceptionDetail = @EM,
    @AdditionalInfo = @AI
    SET @TranStatus='FALSE';
    END CATCH
    SELECT @TranStatus;

得到的错误是

无法将值 NULL 插入到列“dealrid”、表“DB_LMS.dbo.LMS_dealerorusercreation”中;列不允许空值。插入失败。

【问题讨论】:

  • 您是否真的希望有人通过所有这些代码并回答?可能这里甚至没有足够的信息来回答。我也没有看到您有任何解决此问题的尝试,也没有进一步的信息。这个问题不符合最低标准。
  • 旁注 - CREATE PROCEDURE:“在命名过程时避免使用 sp_ 前缀。SQL Server 使用此前缀来指定系统过程。使用前缀可以如果存在同名的系统过程,则导致应用程序代码中断。”

标签: sql-server tsql stored-procedures


【解决方案1】:

你需要做两件事之一,要么......

  • 确保为该列传入一个非空值,或者;
  • 确保您的列接受空值(如果这是该字段的所需属性)。

【讨论】:

    【解决方案2】:

    我在代码中看到的错误。

    在插入 LMS_dealerorusercreation 表时,您从未选择 dealrid 列。请选择相同的。

    INSERT INTO LMS_dealerorusercreation(
    rid,
    stateid,
    regonid,
    Locid,
    addres,
    dealrname,
    landno,
    mobno,
    altcontno,
    email,
    desig,
    reporting,
    status,
    CompanyId,
    dealrid
    )
    VALUES(
    @rid,
    @stateid,
    @regonid,
    @Locid,
    @address,
    @dealrname,
    @landno,
    @mobno,
    @altcontno,
    @email,
    @desig,
    @reporting,
    @status,
    @CompanyId,
    @dealrid
    )
    

    【讨论】:

    • dealrid 作为身份给出,所以我应该如何将值传递给 dealrid
    【解决方案3】:

    如错误消息所述,它是 juat。

    您正在尝试向已创建不为 null 的 dealrid 的表执行插入操作。如果您查看您的插入语句,您并没有选择并将值传递给它。

    【讨论】:

    • dealrid 已经给出了身份规范=true 那么我应该如何将值传递给它,它是自动递增的
    • 那么您可能没有将其设置为自动增量。检查该列确实是一个标识列,即如果您编写表格脚本,您应该寻找类似 IDENTITY(x,y) 的内容。尝试执行以下命令:SELECT IDENT_CURRENT('LMS_dealerorusercreation')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多