Sample code for 30+ languages & platforms
SQL Server

Xero Export Accounts to CSV

Demonstrates how to export Accounts data to a CSV.

Note: Requires Chilkat v9.5.0.64 or greater.

Chilkat SQL Server Downloads

SQL Server
-- 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

    -- Note: Requires Chilkat v9.5.0.64 or greater.

    -- This requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @rest int
    EXEC @hr = sp_OACreate 'Chilkat.Rest', @rest OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Before sending REST API calls, the REST object needs to be
    -- initialized for OAuth1.
    -- See Xero 2-Legged OAuth1 Setup for sample code.

    -- Assuming the REST object's OAuth1 authenticator is setup, and the initial
    -- connection was made, we may now send REST HTTP requests..

    -- Get the full list of accounts.
    DECLARE @sbXml int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbXml OUT

    EXEC sp_OAMethod @rest, 'FullRequestNoBodySb', @success OUT, 'GET', '/api.xro/2.0/Accounts', @sbXml
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @sbXml
        RETURN
      END

    -- A 200 response is expected for actual success.
    EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @iTmp0 OUT
    IF @iTmp0 <> 200
      BEGIN
        EXEC sp_OAMethod @sbXml, 'GetAsString', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @sbXml
        RETURN
      END

    -- Build a CSV containing a few Account fields.
    DECLARE @csv int
    EXEC @hr = sp_OACreate 'Chilkat.Csv', @csv OUT

    EXEC sp_OASetProperty @csv, 'HasColumnNames', 1
    EXEC sp_OAMethod @csv, 'SetColumnName', @success OUT, 0, 'AccountID'
    EXEC sp_OAMethod @csv, 'SetColumnName', @success OUT, 1, 'Name'
    EXEC sp_OAMethod @csv, 'SetColumnName', @success OUT, 2, 'Code'
    EXEC sp_OAMethod @csv, 'SetColumnName', @success OUT, 3, 'EnablePaymentsToAccount'

    -- Iterate over the accounts and build the CSV.
    DECLARE @bAutoTrim int
    SELECT @bAutoTrim = 0
    DECLARE @xml int
    EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT

    EXEC sp_OAMethod @xml, 'LoadSb', @success OUT, @sbXml, @bAutoTrim

    DECLARE @numAccounts int
    EXEC sp_OAMethod @xml, 'NumChildrenAt', @numAccounts OUT, 'Accounts'
    DECLARE @i int
    SELECT @i = 0
    WHILE @i < @numAccounts
      BEGIN
        EXEC sp_OASetProperty @xml, 'I', @i
        EXEC sp_OAMethod @xml, 'GetChildContent', @sTmp0 OUT, 'Accounts|Account[i]|AccountID'
        EXEC sp_OAMethod @csv, 'SetCellByName', @success OUT, @i, 'AccountID', @sTmp0
        EXEC sp_OAMethod @xml, 'GetChildContent', @sTmp0 OUT, 'Accounts|Account[i]|Name'
        EXEC sp_OAMethod @csv, 'SetCellByName', @success OUT, @i, 'Name', @sTmp0
        EXEC sp_OAMethod @xml, 'GetChildContent', @sTmp0 OUT, 'Accounts|Account[i]|Code'
        EXEC sp_OAMethod @csv, 'SetCellByName', @success OUT, @i, 'Code', @sTmp0
        EXEC sp_OAMethod @xml, 'GetChildContent', @sTmp0 OUT, 'Accounts|Account[i]|EnablePaymentsToAccount'
        EXEC sp_OAMethod @csv, 'SetCellByName', @success OUT, @i, 'EnablePaymentsToAccount', @sTmp0
        SELECT @i = @i + 1
      END

    -- Examine the CSV.
    EXEC sp_OAMethod @csv, 'SaveToString', @sTmp0 OUT
    PRINT @sTmp0

    -- Save the CSV to a file.
    EXEC sp_OAMethod @csv, 'SaveFile', @success OUT, 'qa_output/xero_accounts.csv'

    EXEC @hr = sp_OADestroy @rest
    EXEC @hr = sp_OADestroy @sbXml
    EXEC @hr = sp_OADestroy @csv
    EXEC @hr = sp_OADestroy @xml


END
GO