Перебирая столбец идентификатора таблицы, передавая его URL (JSON), вставляя в таблицу? - PullRequest
0 голосов
/ 17 марта 2019

Я бы предположил, что для этого использовал бы курсор. Я понимаю концепцию, но никогда не применяю ее на практике. Мне было поручено извлекать данные через API из Swagger в SQL Server.

Код отлично работает ниже, если я объявляю переменную @branch, но я очень сопротивляюсь ленивому подходу, копируя код 17 раз и меняя переменную @branch для вставки в таблицу, как я хотел бы автоматизировать процесс на будущее, когда новые филиалы появятся на борту

У меня есть таблица с именем dbo.branches, которая выглядит следующим образом:

branch_example

Код, упомянутый выше, который отлично работает, это

DECLARE @Object AS INT;
DECLARE @hr AS INT

DECLARE @json AS TABLE (Json_Table NVARCHAR(MAX))
DECLARE @URL AS NVARCHAR(MAX)
DECLARE @branch AS NVARCHAR(MAX)
DECLARE @shortname AS NVARCHAR(MAX)
DECLARE @api_key AS NVARCHAR(MAX)

DECLARE @start_date AS DATE
DECLARE @offset AS INT
DECLARE @count AS INT

SET @api_key = '123456'
SET @shortname = 'abcd'
SET @branch = '0004-888c'
SET @offset = 0
SET @start_date = convert(char(10),getdate()-90,126)
SET @count = 1000
SET @URL= CONCAT('https://*************/',@shortname,'/********?branchID=',@branch,'&startDate=',@start_date,'&offset=',@offset,'&count=',@count,'&api_key=',@api_key)

Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object

Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',@URL,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object

Exec @hr=sp_OAMethod @Object, 'send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object

Exec @hr=sp_OAMethod @Object, 'responseText', @json OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object

INSERT INTO @json (Json_Table) 
   EXEC sp_OAGetProperty @Object, 'responseText'

SELECT * FROM @json

INSERT INTO dbo.mortgages
    SELECT * 
    FROM OPENJSON((select * from @json), N'$.Data')
    WITH 
        ([Amount] DECIMAL(8,2) N'$.Amount',
         [Borrower_Account_Name] NVARCHAR(MAX) N'$.BorrowerAccountName',
         [Created_At] DATETIME2 N'$.CreatedAt',
         [Extra_Notes] NVARCHAR(MAX) N'$.ExtraNotes',
         [Interest_Rate] NVARCHAR(MAX) N'$.IntrestRate',
         [Market_Value] DECIMAL(8,2) N'$.MarketValue',
         [Monthly_Payment] DECIMAL(5,2) N'$.MonthlyPayment',
         [Mortgage_Account_Number] NVARCHAR(MAX) N'$.MortgageAccountNumber',
         [Mortgage_Provider] NVARCHAR(100)  N'$.MortgageProvider',
         [Property_Ownable_ID] NVARCHAR(MAX) N'$.PropertyOwnableID',
         [Sales_Instruction_ID] NVARCHAR(5) N'$.SalesInstructionID',
         [Type] NVARCHAR(MAX) N'$.Type',
         [Valuation_Date] DATETIME2  N'$.ValuationDate'
    )   

Я хотел бы добиться, чтобы OID из dbo.branches передавался в @branch, который завершит цикл @URL, чтобы вставить вывод JSON в dbo.mortgages для каждого OID в dbo.branches

У меня также было в черепе, что мне понадобится row_number в dbo.branches, поэтому, когда он делает цикл, он знает, когда остановиться?

большое спасибо за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...