У меня есть хранимая процедура, которая обновит флаг на основе кода графства, 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
OK - Я думал, поднимая ошибку бы предотвратить обновление от запуска. – MISNole
Итак, вы действительно не хотели обновлять таблицу, если только один из параметров не был «null»? – Lamak