【问题标题】:Cannot insert value NULL into column, but values in error message have nothing to do with my code无法将值 NULL 插入列,但错误消息中的值与我的代码无关
【发布时间】:2023-03-10 16:10:01
【问题描述】:

我有一个 VB.NET 程序,它调用 SQL Server 中的存储过程,该存储过程将数据插入表中。运行此代码后,我收到以下错误消息:

消息 515,级别 16,状态 2,过程 uspAddSponsor,第 19 行 [批处理开始行 406]
无法将值 NULL 插入列“intGenderID”、表“dbSQL1.dbo.TGolfers”;列不允许空值。插入失败。

问题是在存储过程中既没有引用intGenderID 也没有引用TGolfers

这是我的存储过程代码:

CREATE PROCEDURE uspAddSponsor
    --@intGolferID              AS INTEGER OUTPUT
    @strFirstName AS VARCHAR(255),
    @strLastName AS VARCHAR(255),
    @strStreetAddress AS VARCHAR(255),
    @strCity AS VARCHAR(255),
    @strState AS VARCHAR(255),
    @strZip AS VARCHAR(255),
    @strPhoneNumber AS VARCHAR(255),
    @strEmail AS VARCHAR(255)
AS
    SET XACT_ABORT ON

BEGIN TRANSACTION

    INSERT INTO TSponsors (strFirstName, strLastName, strStreetAddress, strCity, strState, strZip, strPhoneNumber, strEmail)
    VALUES (@strFirstName, @strLastName, @strStreetAddress, @strCity, @strState, @strZip, @strPhoneNumber, @strEmail)

    COMMIT TRANSACTION
GO

下面是调用存储过程的代码:

EXECUTE uspAddSponsor 'Joe', 'Johnson', '420 Main St', 'Ashton Park', 'IN', '46225', '5136656969', 'jjohnson@gmail.com' 

这里是粘性部分。单独运行 INSERT 语句没有问题。但是,执行具有完全相同 INSERT 语句的存储过程会导致上述错误。我真的不知道发生了什么。

没有链接 TGolfers 和 TSponsors 的外键。 TSponsors 甚至没有 intGenderID 列。我不知道是什么原因造成的。

感谢您的帮助!

【问题讨论】:

  • 寻找一个触发器,可能有一些根据调用上下文表现不同的逻辑。
  • 您是否尝试在 SSMS 中执行存储过程?
  • 一种可能性是您有两个同名但在不同架构下的 SP。创建/调用 SP 时,最好指定模式,例如EXECUTE dbo.uspAddSponsor ...
  • 这里可能使用了同义词?当前数据库未设置为您假设的数据库?

标签: sql-server vb.net stored-procedures sql-insert


【解决方案1】:

这就是解决问题的原因,虽然我不确定为什么会首先发生错误。我仍然有我用来创建数据库的数据库脚本及其中的所有内容,所以我重新运行脚本来重置数据库,问题就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多