Ich habe eine gespeicherte Prozedur, die ein Flag basierend auf einem County Code, einer URL oder einer Kombination von beiden aktualisiert. Zum Beispiel 03 Landkreis könnte diese beiden Datensätze:Stored Procedure Throwing Error, aber Datensatz aktualisieren
county_code = 03
webservice_type_id = 1
webservice_URL = http://192.168.100.3/A
Und
county_code = 03
webservice_type_id = 2
webservice_URL = http://192.168.100.3/B
Und wenn ich möchte, dass meine gespeicherten Prozedur verwenden, um das Flag zu aktivieren/deaktivieren, soll ich in der Lage sein zu laufen:
execute dbo.usp_webservice_change_status
@enable = 1
@county_code = '03'
@webserviceURL = http://192.168.100.3/B
und nur den Datensatz aktualisieren, der beide Bedingungen erfüllt. Aber was ich sehe, ist, dass die gespeicherte Prozedur die Datensätze für den Kreis aktualisiert, aber die RAISERROR-Anweisung in der gespeicherten Prozedur auslöst.
Zum Beispiel, hier sind meine aktuellen Datensätze:
Und wenn ich laufen die gespeicherte Prozedur:
Ich erhalte die folgende:
Aber wenn ich mir die Aufzeichnungen sehen wieder, ich sehe, dass sie wurden aktualisiert:
Hier ist der Code für die gespeicherte Prozedur ist. Kann mir jemand helfen zu verstehen, wo ich falsch liege?
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;
gut, natürlich, werden Sie zuerst den Fehler verursacht, und dann eine 'UPDATE' – Lamak
OK laufen - ich dachte, den Fehler erhöhen das würde verhindern Aktualisierung von ausgeführt werden. – MISNole
Sie wollten also die Tabelle eigentlich nicht aktualisieren, wenn einer der Parameter nicht 'null' war? – Lamak