SQL sp_OAMethod String Length Return Value Limitations
The sp_OAMethod function is used to call ActiveX methods in SQL stored procedures. If the ActiveX method returns a string, there is a limit imposed by sp_OAMethod on the size of the string that can be returned. (Perhaps it is 4000 chars?)
This blog post describes a way to workaround this limitation.
An example of a method call that is likely to return a string longer than 4000 chars is the HTTP method to GET a web page. For example:
DECLARE @html nvarchar(max) EXEC sp_OAMethod @http, 'QuickGetStr', @html OUT, 'https://www.paypal.com/'
The workaround is to tell Chilkat to internally save the last string returned by the last method called from any Chilkat object. Then you can access the LastStringResult property using a temp table.
The 1st step is to tell Chilkat to save each string return value in the LastStringResult property.
DECLARE @hr int DECLARE @global int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Global', @global OUT IF @hr <> 0 BEGIN PRINT 'Failed to create Global ActiveX component' RETURN END EXEC sp_OASetProperty @global, 'KeepStringResult', 1 EXEC @hr = sp_OADestroy @global
Now we can make the Chilkat method call and ignore the string returned by the method and instead get it from the LastStringResult property. For example:
CREATE PROC ChilkatSetup AS BEGIN -- Checking return values for success omitted for brevity. -- Call ChilkatSetup at the start of each stored procedure. DECLARE @glob int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Global', @glob OUT DECLARE @success int EXEC sp_OAMethod @glob, 'UnlockBundle', @success OUT, 'Your unlock code' EXEC sp_OASetProperty @global, 'KeepStringResult', 1 END CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int -- Unlock and set KeepStringResult EXEC ChilkatSetup -- DECLARE @http int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Http', @http OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX object' RETURN END -- Send the HTTP GET, but we'll initially ignore the return value. DECLARE @html nvarchar(max) EXEC sp_OAMethod @http, 'QuickGetStr', @html OUT, 'https://www.paypal.com/' -- Check LastMethodSuccess to see if the method succeeded. EXEC sp_OAGetProperty @http, 'LastMethodSuccess', @success OUT IF @success <> 1 BEGIN -- The LastErrorText may be very large, so we should access it through a temp table.. DECLARE @tmp1 TABLE (lastErrText ntext) INSERT INTO @tmp1 EXEC sp_OAGetProperty @http, 'LastErrorText' SELECT * from @tmp1 EXEC @hr = sp_OADestroy @http RETURN END -- The Chilkat method succeeded. Now get the return string from LastStringResult via a temp table. DECLARE @tmp2 TABLE (res ntext) INSERT INTO @tmp2 EXEC sp_OAGetProperty @http, 'LastStringResult' SELECT @html=res from @tmp2 PRINT @html EXEC @hr = sp_OADestroy @http END GO