Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

RAISERROR in TRY/Catch block after XML Schema Collection Validation. Expand / Collapse
Author
Message
Posted Friday, April 3, 2009 10:55 AM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Wednesday, February 13, 2013 9:15 PM
Points: 112, Visits: 319
Posted this earlier under SQL 7, 2000 T-SQL Section. Have deleted that one and reposting under SQL 2005.
I am trying to Raise an error using RAISERROR function in sql when the XML schema validation fails.
I am doing this inside a store proc. I am declaring the XML doc binding it to it's XSD schema in the TRY block and if validation fails, raise a user define error number by using RAISERROR function in the catch block. However, somehow i am not able to do this and sql return it's own error the moment it executes that line of code. So using Employee example here, I am doing something like this.

CREATE PROC ImportEmployeeInfo
@EmployeeXML as XML
AS

BEGIN

BEGIN TRY

DECLARE @EmpXML AS XML(EmployeeSchema) --declaring a local XML variable and binding it to its XSD Schema Collection
DECLARE @LocalError

SET @EmpXML = @EmployeeXML -- here I am setting the @EmpXML to @EmployeeXML variable passed in
IF @@error<>0 --if the @EmployeeXML failed the XSD validation, i beileve there would be an error right however this line never gets executed
BEGIN
SET @LocalError = 50001 --user defined error
RAISERROR(' The input parameter @EmployeeXML is not valid', 16, 1)
END

--The XML shredding and import into table goes here

END TRY

BEGIN CATCH

--I have another another user defined errorhandler proc here which will take the above @LocalError
--as input parameter and raise a detailed error

END CATCH

END --End of Proc
Post #690090
Posted Friday, April 3, 2009 2:27 PM


SSCertifiable

SSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiable

Group: General Forum Members
Last Login: Yesterday @ 1:01 PM
Points: 7,118, Visits: 15,000
The error handling and the error catching in SQL 2005 can be tricky. Depending on the erro you might be facing, it may be "batch" or "thread" terminating, meaning the inner context cannot catch anything, since it's been terminated.

The TRY...CATCH routines inside the stored proc can catch a lot of the minor non terminating errors. If you want to catch more errors than that - try wrapping your CALL to the stored proc in a TRY....CATCH. That way you can g etall the detail you need.


----------------------------------------------------------------------------------
Your lack of planning does not constitute an emergency on my part...unless you're my manager...or a director and above...or a really loud-spoken end-user..All right - what was my emergency again?
Post #690235
Posted Friday, April 3, 2009 3:18 PM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Wednesday, February 13, 2013 9:15 PM
Points: 112, Visits: 319
Hit Matt,

Thanks for you feedback.
Actually yes, I am already doing that in my Unit Test for the from as shown below, but still no luck

--Set the values for the Input variables
DECLARE @EmpXML XML = 'Test',
@ErrorMsg varchar(200)

BEGIN TRY

EXEC @rc = dbo.ImportEmployeeInfo
@EmployeeXML = @EmpXML

END TRY

BEGIN CATCH
SELECT @Error = ERROR_MESSAGE()
END CATCH

SELECT @Error AS Error
Post #690260
Posted Friday, April 3, 2009 10:33 PM


SSCarpal Tunnel

SSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal TunnelSSCarpal Tunnel

Group: General Forum Members
Last Login: Friday, July 25, 2014 6:09 PM
Points: 4,000, Visits: 6,058
How about this approach?

DECLARE @EmpXML AS XML(EmployeeSchema)
DECLARE @LocalError -- as what?

BEGIN TRY
SET @EmpXML = @EmployeeXML -- TRY to set the @EmpXML to @EmployeeXML
END Try
BEGIN CATCH
-- If the attempt fails, then
SET @LocalError = 50001 --user defined error
RAISERROR(' The input parameter @EmployeeXML is not valid', 16, 1)
END



__________________________________________________

Against stupidity the gods themselves contend in vain. -- Friedrich Schiller
Stop, children, what's that sound? -- Stephen Stills
Post #690357
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse