无法使用SQL Server存储过程更新记录
我试过所有这些工作,我知道我错过了一些非常简单的事情。无法使用SQL Server存储过程更新记录
我有一个调用存储过程来更新一个表中的记录的方法。
恰恰恰巧其中一个参数在数据库中是可以为空的,并且它的程序值在这种情况下以vehicleNo
列的空字符串(“”)形式出现。
所有其他记录得到更新,除非一个空字符串进来,我尝试和更新存储过程的记录。
可有人请指出我需要添加到正确使存储过程或代码的工作?
下面的代码,我试过用硬编码值执行存储过程,但随着ImageID
没有更新。
存储过程
ALTER PROCEDURE [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo int,
@vehicleNo varchar(6) = NULL,
@imageID varchar(20)
AS
BEGIN
IF ((@vehicleNo = '') OR (@vehicleNo IS NULL))
BEGIN
UPDATE dbo.HH_FuelTkt
SET Image_ID = @imageID
WHERE Ticket_No = @ticketNo
AND Vehicle_No = NULL
END
ELSE
BEGIN
UPDATE dbo.HH_FuelTkt
SET Image_ID = @imageID
WHERE Ticket_No = @ticketNo
AND Vehicle_No = @vehicleNo
END END
C#代码:
public static bool UpdateData(int ticketNo, string vehicleNo, string imageID)
{
int retValue = 0;
try
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HHInboundSqlConnection"].ToString()))
{
SqlCommand cmd = new SqlCommand("SPR_UPDATE_IMAGEID", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ticketNo", ticketNo);
cmd.Parameters.AddWithValue("@vehicleNo", vehicleNo);
cmd.Parameters.AddWithValue("@imageID", imageID);
cmd.Connection.Open();
retValue = cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
throw e;
}
return (retValue > 0);
}
手册存储过程执行#1:
DECLARE @return_value int
EXEC @return_value = [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo = 147058,
@vehicleNo = N'''''',
@imageID = N'39084'
SELECT 'Return Value' = @return_value
手动存储过程执行#2:
DECLARE @return_value int
EXEC @return_value = [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo = 147058,
@vehicleNo = N'NULL',
@imageID = N'39084'
SELECT 'Return Value' = @return_value
IF ((@vehicleNo = '') OR (@vehicleNo IS NULL))
BEGIN
UPDATE dbo.HH_FuelTkt
SET Image_ID = @imageID
WHERE Ticket_No = @ticketNo
**AND Vehicle_No = NULL**
END
变化
AND Vehicle_No = NULL
到
AND Vehicle_No IS NULL
通常在我们使用SQL检查空值IS NULL代替= NULL
我同意@ah_hau。 'something = NULL'是SQL代码中常见的菜鸟错误。 – 2014-09-04 01:32:15
我不能相信我将语句设置为“= NULL”而不是“IS NULL”。这是漫长的一天......超过12个小时,我的大脑被炸了。我不记得我最后一次犯这个错误。谢谢 :) – sagesky36 2014-09-04 12:25:51
这看起来错 IF((@vehicleNo '')或(@vehicleNo IS NULL)) 岂不是@ vehicleN0 = ''? – ojf 2014-09-04 00:08:49
我没有看到任何语法错误。我尝试删除一部分,然后另一部分;单独运行它们,但仍然无法运行。 – sagesky36 2014-09-04 00:10:48
你不想检查它是否为空字符串或null?还有,在第二个sproc中,你是不是指 @vehicleNo = NULL 而不是nvarchar值'NULL' 另外,我不认为你应该在你的字符串文字前使用N,因为这表示nvarchar,你是使用变量 – ojf 2014-09-04 00:12:19