I tried to wrap the exec sp_xml_preparedocument @iDoc OUTPUT,@XMLDocin a separate SProc, which normally works for me. But it failed :-(CREATE PROCEDURE dbo.MySProc1 @iDoc int OUTPUT, @XMLDoc ntextAS SET NOCOUNT ONSET XACT_ABORT ONDECLARE @intErrNo intSELECT [MySProc1] = 'MySProc1 Start'exec sp_xml_preparedocument @iDoc OUTPUT,@XMLDoc SELECT @intErrNo = @@ERRORSELECT [MySProc1] = 'MySProc1 End', [@intErrNo]=@intErrNoRETURN @intErrNoGOCREATE PROCEDURE dbo.MySProc2ASSET NOCOUNT ONSET XACT_ABORT ONDECLARE @intErrNo int, @iDoc intSELECT [MySProc2] = 'Call MySProc1 with good XML'EXEC @intErrNo = dbo.MySProc1 @iDoc=@iDoc OUTPUT, @XMLDoc='<data><loginid>Self</loginid><password>secret</password></data>'IF @@ERROR <> 0 OR @intErrNo <> 0 SELECT [Error]='Need to handle error'SELECT [MySProc2] = 'MySProc1 returned'SELECT [cart_customer_uid]=loginid, [pword]=password from OPENXML (@iDoc, '/data',2) WITH (loginid varchar(10) , password varchar(25)) exec sp_xml_removedocument @iDoc-- Duff oneSELECT [MySProc2] = 'Call MySProc1 with duff XML'EXEC @intErrNo = dbo.MySProc1 @iDoc=@iDoc OUTPUT, @XMLDoc='<data><loginidSelf</loginid><password>secret</password></data>'IF @@ERROR <> 0 OR @intErrNo <> 0 SELECT [Error]='Need to handle error'SELECT [MySProc2] = 'MySProc1 returned'SELECT [cart_customer_uid]=loginid, [pword]=password from OPENXML (@iDoc, '/data',2) WITH (loginid varchar(10) , password varchar(25)) exec sp_xml_removedocument @iDocGOEXEC dbo.MySProc2GODROP PROCEDURE dbo.MySProc1GODROP PROCEDURE dbo.MySProc2GO
gives:Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 12XML parsing error: A name contained an invalid character.Kristen