我有一个存储过程,将更新基于一个县代码,URL或两者结合的标志。例如,县03可能有这两个记录:存储过程投掷的错误,但更新记录
county_code = 03
webservice_type_id = 1
webservice_URL = http://192.168.100.3/A
而且
county_code = 03
webservice_type_id = 2
webservice_URL = http://192.168.100.3/B
如果我想用我的存储过程来启用/禁用标志,我应该能够运行:
execute dbo.usp_webservice_change_status
@enable = 1
@county_code = '03'
@webserviceURL = http://192.168.100.3/B
并仅更新与两个条件相匹配的记录。但是我所看到的是存储过程更新县的记录,但在存储过程中抛出RAISERROR语句。
例如,这里是我目前的记录:
当我运行存储过程:
我得到以下几点:
这里是存储过程的代码。任何人都可以帮助我了解我的错在哪里?
ALTER PROCEDURE [dbo].[usp_webservice_change_status]
@enable AS BIT,
@county_code AS CHAR(2) = NULL,
@webserviceURL AS VARCHAR(4000) = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @enable IS NULL
RAISERROR ('The value for @enable should not be null', 15, 1);
IF (@county_code IS NULL AND @webserviceURL IS NULL)
RAISERROR ('The value for @county_code and @webserviceURL cannot both be null', 15, 1);
-- Update for County Code Only
IF (@county_code IS NOT NULL AND @webserviceURL IS NULL)
UPDATE dbo.webservice_config
SET [enable] = @enable,
comments = CASE
WHEN @enable = 1
THEN 'Enabled by ' + SUSER_SNAME()
ELSE 'Disabled by ' + SUSER_SNAME()
END
WHERE county_code = @county_code;
-- Update for Webservice URL only
ELSE IF (@county_code IS NULL AND @webserviceURL IS NOT NULL)
UPDATE dbo.webservice_config
SET [enable] = @enable,
comments = CASE
WHEN @enable = 1
THEN 'Enabled by ' + SUSER_SNAME()
ELSE 'Disabled by ' + SUSER_SNAME()
END
WHERE webservice_URL = @webserviceURL;
-- Update for both County Code and Webservice URL - but only if the records match
ELSE IF (@county_code IS NOT NULL AND @webserviceURL IS NOT NULL)
IF (@@ROWCOUNT) < 1
RAISERROR('Nothing Updated Due to Non Matching Records', 15, 1);
UPDATE dbo.webservice_config
SET [enable] = @enable,
comments = CASE
WHEN @enable = 1
THEN 'Enabled by ' + SUSER_SNAME()
ELSE 'Disabled by ' + SUSER_SNAME()
END
WHERE (county_code = @county_code
AND webservice_URL = @webserviceURL);
END;
好,当然,你先加错误,然后运行'UPDATE' – Lamak
行 - 我想提高错误将阻止从运行中更新。 – MISNole
所以,你其实是想不更新表,除非参数之一是'null'? – Lamak