【发布时间】: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