SQL存储过程IF语句未捕获空值和正确条件
下面的存储过程未捕获正确的条件。如果我提交两个图像,它会正确地写入两个图像。如果我上传1个图像并留下一个空白,它将空白保存为覆盖现有数据的空白。最后,如果我将这两个都保留为空,它会将这两个都保存为空,覆盖现有数据。任何帮助都会很好。谢谢 存储过程SQL存储过程IF语句未捕获空值和正确条件,sql,stored-procedures,Sql,Stored Procedures,下面的存储过程未捕获正确的条件。如果我提交两个图像,它会正确地写入两个图像。如果我上传1个图像并留下一个空白,它将空白保存为覆盖现有数据的空白。最后,如果我将这两个都保留为空,它会将这两个都保存为空,覆盖现有数据。任何帮助都会很好。谢谢 存储过程 你的空字符串。不是数据库空值。空字符串是一个值 这意味着代码总是使用相同的条件 在程序顶部添加以下内容: SELECT @TrendGuideLandingImage1 = NULLIF(@TrendGuideLandingImage1, '')
你的空字符串。不是数据库空值。空字符串是一个值 这意味着代码总是使用相同的条件 在程序顶部添加以下内容:
SELECT
@TrendGuideLandingImage1 = NULLIF(@TrendGuideLandingImage1, ''),
@TrendGuideLandingImage2 = NULLIF(@TrendGuideLandingImage2, '')
或者添加默认值,不在客户端代码中设置参数
ALTER PROCEDURE fstage.spUpdateCMSTrendLanding
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max) = NULL,
@TrendGuideLandingImage2 nvarchar(max) = NULL
AS
你的空字符串。不是数据库空值。空字符串是一个值 这意味着代码总是使用相同的条件 在程序顶部添加以下内容:
SELECT
@TrendGuideLandingImage1 = NULLIF(@TrendGuideLandingImage1, ''),
@TrendGuideLandingImage2 = NULLIF(@TrendGuideLandingImage2, '')
或者添加默认值,不在客户端代码中设置参数
ALTER PROCEDURE fstage.spUpdateCMSTrendLanding
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max) = NULL,
@TrendGuideLandingImage2 nvarchar(max) = NULL
AS
尝试使用ISNull执行此操作
IF IsNull(@TrendGuideLandingImage1,"") AND IsNull(@TrendGuideLandingImage2,"") =""
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText;
END
尝试使用ISNull执行此操作
IF IsNull(@TrendGuideLandingImage1,"") AND IsNull(@TrendGuideLandingImage2,"") =""
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText;
END
您可以使用
NULLIF
和ISNULL
将过程重写为单个UPDATE
语句
CREATE PROCEDURE fstage.spUpdateCMSTrendLanding
(
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max),
@TrendGuideLandingImage2 nvarchar(max)
)
AS
UPDATE fstage.staticCMS
SET TrendGuideLanding = @TrendLandingText
,TrendGuideLandingImage1
= ISNULL(NULLIF(@TrendGuideLandingImage1, ''), TrendGuideLandingImage1)
, TrendGuideLandingImage2
= ISNULL(NULLIF(@TrendGuideLandingImage2, ''), TrendGuideLandingImage2)
您可以使用
NULLIF
和ISNULL
将过程重写为单个UPDATE
语句
CREATE PROCEDURE fstage.spUpdateCMSTrendLanding
(
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max),
@TrendGuideLandingImage2 nvarchar(max)
)
AS
UPDATE fstage.staticCMS
SET TrendGuideLanding = @TrendLandingText
,TrendGuideLandingImage1
= ISNULL(NULLIF(@TrendGuideLandingImage1, ''), TrendGuideLandingImage1)
, TrendGuideLandingImage2
= ISNULL(NULLIF(@TrendGuideLandingImage2, ''), TrendGuideLandingImage2)
工作得很好!(过程解决方案顶部)。非常感谢你!工作得很好!(过程解决方案顶部)。非常感谢你!谢谢你抽出时间。谢谢你的帮助,谢谢你抽出时间。感谢您的帮助。这将是对LOB列的虚拟更新,可能会很昂贵:如果两个图像都为空,则为2个LOB列。如果不是LOB,那么是的,但在这种情况下最好不要太多,这将是对LOB列的虚拟更新,这可能会很昂贵:或者如果两个图像都为空,则会对两个LOB列进行虚拟更新。如果不是LOB,那么是的,但在这种情况下最好不要太高