我已经尝试了一切来实现这一点,我知道我错过了一些非常简单的事情。
我有一个调用存储过程来更新表中记录的方法。
恰好,其中一个参数在数据库中可以为空,并且它的程序值作为空字符串("")在此特定的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
答案 0 :(得分:2)
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