SQL Server
SQL Server
batchGet (Read Multiple Ranges)
See more Google Sheets Examples
Reads multiple ranges from a Google Sheets spreadsheet in one GET request.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
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- This example uses a previously obtained access token having permission for the
-- Google Sheets scope.
-- In this example, Get Google Sheets OAuth2 Access Token, the access
-- token was saved to a JSON file. This example fetches the access token from the file..
DECLARE @jsonToken int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonToken OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @jsonToken, 'LoadFile', @success OUT, 'qa_data/tokens/googleSheets.json'
EXEC sp_OAMethod @jsonToken, 'HasMember', @iTmp0 OUT, 'access_token'
IF @iTmp0 = 0
BEGIN
PRINT 'No access token found.'
EXEC @hr = sp_OADestroy @jsonToken
RETURN
END
-- We'll be sending a GET request with query params to this URL: https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchGet?ranges=Sheet1!A1:A2&ranges=Sheet1!B1:B2
-- The domain is "sheets.googleapis.com"
-- The path is "/v4/spreadsheets/spreadsheetId/values:batchGet"
DECLARE @req int
EXEC @hr = sp_OACreate 'Chilkat.HttpRequest', @req OUT
EXEC sp_OASetProperty @req, 'Path', '/v4/spreadsheets/spreadsheetId/values:batchGet'
EXEC sp_OASetProperty @req, 'HttpVerb', 'GET'
-- Add each range to fetch.
EXEC sp_OAMethod @req, 'AddParam', NULL, 'ranges', 'Sheet1!A1:A2'
EXEC sp_OAMethod @req, 'AddParam', NULL, 'ranges', 'Sheet1!B1:B2'
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OAMethod @jsonToken, 'StringOf', @sTmp0 OUT, 'access_token'
EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0
-- 443 is the SSL/TLS port for HTTPS.
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @http, 'HttpSReq', @success OUT, 'sheets.googleapis.com', 443, 1, @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @resp
RETURN
END
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
PRINT @sTmp0
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
EXEC sp_OAMethod @json, 'Load', @success OUT, @sTmp0
-- A sample response is shown below.
-- To generate the parsing source code for a JSON response, paste
-- the JSON into this online tool: Generate JSON parsing code
-- {
-- "spreadsheetId": "1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA",
-- "valueRanges": [
-- {
-- "range": "Sheet1!A1:A2",
-- "majorDimension": "ROWS",
-- "values": [
-- [
-- "Item"
-- ],
-- [
-- "Wheel"
-- ]
-- ]
-- },
-- {
-- "range": "Sheet1!B1:B2",
-- "majorDimension": "ROWS",
-- "values": [
-- [
-- "Cost"
-- ],
-- [
-- "$20.50"
-- ]
-- ]
-- }
-- ]
-- }
DECLARE @i int
DECLARE @count_i int
DECLARE @j int
DECLARE @count_j int
DECLARE @k int
DECLARE @count_k int
DECLARE @spreadsheetId nvarchar(4000)
EXEC sp_OAMethod @json, 'StringOf', @spreadsheetId OUT, 'spreadsheetId'
SELECT @i = 0
EXEC sp_OAMethod @json, 'SizeOfArray', @count_i OUT, 'valueRanges'
WHILE @i < @count_i
BEGIN
EXEC sp_OASetProperty @json, 'I', @i
DECLARE @range nvarchar(4000)
EXEC sp_OAMethod @json, 'StringOf', @range OUT, 'valueRanges[i].range'
DECLARE @majorDimension nvarchar(4000)
EXEC sp_OAMethod @json, 'StringOf', @majorDimension OUT, 'valueRanges[i].majorDimension'
SELECT @j = 0
EXEC sp_OAMethod @json, 'SizeOfArray', @count_j OUT, 'valueRanges[i].values'
WHILE @j < @count_j
BEGIN
EXEC sp_OASetProperty @json, 'J', @j
SELECT @k = 0
EXEC sp_OAMethod @json, 'SizeOfArray', @count_k OUT, 'valueRanges[i].values[j]'
WHILE @k < @count_k
BEGIN
EXEC sp_OASetProperty @json, 'K', @k
DECLARE @strVal nvarchar(4000)
EXEC sp_OAMethod @json, 'StringOf', @strVal OUT, 'valueRanges[i].values[j][k]'
SELECT @k = @k + 1
END
SELECT @j = @j + 1
END
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @resp
EXEC @hr = sp_OADestroy @json
END
GO