SQL Server
SQL Server
XML NewChildBefore
Demonstrates the Chilkat.NewChildBefore method.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OASetProperty @xml, 'Tag', 'order'
EXEC sp_OAMethod @xml, 'NewChild2', NULL, 'order_billing_info|price_list', 'Listino Italia'
EXEC sp_OAMethod @xml, 'NewChild2', NULL, 'order_billing_info|price_list_id', '1'
EXEC sp_OAMethod @xml, 'NewChild2', NULL, 'order_billing_info|first_name', 'Francesco'
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- We now have the following XML:
-- <?xml version="1.0" encoding="utf-8"?>
-- <order>
-- <order_billing_info>
-- <price_list>Listino Italia</price_list>
-- <price_list_id>1</price_list_id>
-- <first_name>Francesco</first_name>
-- </order_billing_info>
-- </order>
-- If there is no "customer_id" element under "order_billing_info", then add it.
EXEC sp_OAMethod @xml, 'HasChildWithTag', @iTmp0 OUT, 'order_billing_info|customer_id'
IF @iTmp0 = 1
BEGIN
PRINT 'customer_id already exists, nothing to do...'
EXEC @hr = sp_OADestroy @xml
RETURN
END
-- Add the customer_id element just before the "price_list" element.
-- Get the "order_billing_info" element
DECLARE @orderBillingInfo int
EXEC sp_OAMethod @xml, 'FindChild', @orderBillingInfo OUT, 'order_billing_info'
-- Call NewChildBefore to add an XML element <customer_id> before <price_list>
-- First get the index of the element price_list
DECLARE @index int
EXEC sp_OAMethod @orderBillingInfo, 'TagIndex', @index OUT, 'price_list'
PRINT 'index = ' + @index
-- Add the "customer_id" element just before specified index.
DECLARE @xCustId int
EXEC sp_OAMethod @orderBillingInfo, 'NewChildBefore', @xCustId OUT, @index, 'customer_id', '1234'
EXEC @hr = sp_OADestroy @xCustId
EXEC @hr = sp_OADestroy @orderBillingInfo
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- We now have:
-- <?xml version="1.0" encoding="utf-8"?>
-- <order>
-- <order_billing_info>
-- <customer_id>1234</customer_id>
-- <price_list>Listino Italia</price_list>
-- <price_list_id>1</price_list_id>
-- <first_name>Francesco</first_name>
-- </order_billing_info>
-- </order>
EXEC @hr = sp_OADestroy @xml
END
GO