The stored procedure below isn't catching the proper conditions. If I submit both images, it writes both images properly. If I upload 1 image and leave one blank, it saves the blank as null overwriting the existing data. And finally, if I leave both blank, it saves both blank overwriting the existing data. Any help would be great. Thanks.
STORED PROC
ALTER PROCEDURE fstage.spUpdateCMSTrendLanding
(
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max),
@TrendGuideLandingImage2 nvarchar(max)
)
AS
BEGIN
SET NOCOUNT ON;
IF @TrendGuideLandingImage1 IS NULL AND @TrendGuideLandingImage2 IS NULL
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText;
END
If (@T开发者_JS百科rendGuideLandingImage1 IS NOT NULL) AND (@TrendGuideLandingImage2 IS NOT NULL)
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText, TrendGuideLandingImage1=@TrendGuideLandingImage1, TrendGuideLandingImage2=@TrendGuideLandingImage2;
END
If (@TrendGuideLandingImage1 IS NOT NULL) AND (@TrendGuideLandingImage2 IS NULL)
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText, TrendGuideLandingImage1=@TrendGuideLandingImage1;
END
If (@TrendGuideLandingImage2 IS NOT NULL) AND (@TrendGuideLandingImage1 IS NULL)
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText, TrendGuideLandingImage2=@TrendGuideLandingImage2;
END
END
Your NULLs are empty strings. Not database NULL values. Empty string is a value.
This means the code always uses the same condition
Add this at the top of the proc:
SELECT
@TrendGuideLandingImage1 = NULLIF(@TrendGuideLandingImage1, ''),
@TrendGuideLandingImage2 = NULLIF(@TrendGuideLandingImage2, '')
Or add defaults and don't set the parameter in client code
ALTER PROCEDURE fstage.spUpdateCMSTrendLanding
@TrendLandingText nvarchar(max),
@TrendGuideLandingImage1 nvarchar(max) = NULL,
@TrendGuideLandingImage2 nvarchar(max) = NULL
AS
Try doing it with ISNull
IF IsNull(@TrendGuideLandingImage1,"") AND IsNull(@TrendGuideLandingImage2,"") =""
BEGIN
UPDATE fstage.staticCMS SET TrendGuideLanding = @TrendLandingText;
END
You can rewrite your procedure as a single UPDATE
statement using NULLIF
and ISNULL
.
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)
精彩评论