郡のコード、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ステートメントをスローするということです。
たとえば、ここに私の現在のレコードは、次のとおりです。
私は次のようになっています:
そして私は、ストアドプロシージャを実行すると
しかし、私は再び記録を見ると、私は彼らが更新されていることを参照してください。ここでは
は、ストアドプロシージャのコードです。誰かが私が間違っているところを理解するのを助けることができますか?
ELSEあなたの最後で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
したがって、パラメータの1つが 'null'でない限り、テーブルを更新しないことを実際には望んでいましたか? – Lamak