Заполните таблицу из файла CSV с помощью хранимой процедуры - PullRequest
0 голосов
/ 10 марта 2020

Я хочу импортировать данные из этой SQL таблицы:

CREATE TABLE [dbo].[TempExchangeRates](
    [currency (Libellés)] [nvarchar](255) NULL,
    [Currency Code] [nvarchar](255) NULL,
    [2019-03] [float] NULL,
    [2019-04] [float] NULL,
    [2019-05] [float] NULL,
    [2019-06] [float] NULL,
    [2019-07] [float] NULL,
    [2019-08] [float] NULL,
    [2019-09] [float] NULL,
    [2019-10] [float] NULL,
    [2019-11] [float] NULL,
    [2019-12] [float] NULL,
    [2020-01] [float] NULL,
    [2020-02] [float] NULL
) 

С образцами данных:

enter image description here

К вот это:

CREATE TABLE [dbo].[ExchangeRates]
(
    [IdExchangeRate] [uniqueidentifier] NOT NULL,
    [ExchangeRateCode] [nvarchar](10) NULL,
    [ExchangeRatePeriodStartDate] [datetime] NULL,
    [ExchangeRatePeriodEndDate] [datetime] NULL,
    [ExchangeRateValue] [decimal](20, 5) NULL,
    [CurrencyCode] [nvarchar](10) NULL,
)

Теперь я хочу вызвать хранимую процедуру, чтобы заполнить реальную таблицу следующим образом:

Я начинаю с такой хранимой процедуры, но я не уверен, как мог бы сделать это

------------------------- 3. Declare StartDateTable --------------------
        DECLARE @StartDateExchangeRate TABLE
        (
          rowid INT IDENTITY(1,1) NOT NULL,
          value float,
          startDate date
        )

    --  Insert Into @StartDateExchangeRate(value, startDate)
        --This finds the start dates by finding unmatched values
        --SELECT id,value
    --  from ExchangeRates

    ------------------------- 2. Declare EndDateTable --------------------
        DECLARE @EndDateExchangeRate TABLE
        (
           EndDate date
        )

        Insert Into @ENdDateExchangeRate(EndDate)
        --This finds the start dates by finding unmatched values
        SELECT EOMONTH(startdate)
        FROM @StartDateExchangeRate As ER1


        -------------------------3. Join NotYet--------------------------

1 Ответ

2 голосов
/ 10 марта 2020

В этом вопросе не хватает деталей

Если предположить, что столбцы TempExchangeRates будут меняться с течением времени, вот вариант, который динамически ОТВЕРЖИТ данные, чтобы их можно было вставить в вашу окончательную структуру.

Пример (или dbFiddle )

Select ExchangeRateCode            = A.[Currency Code]
      ,ExchangeRatePeriodStartDate = period
      ,ExchangeRatePeriodEndDate   = EOMonth(period)
      ,ExchangeRateValue           = B.Value
      ,CurrencyCode                = replace(upper(A.[currency (Libellés)]),' ','')
      ,CreatedBy                   = 'SomeString'
      ,CreatededAt                 = getdate()
 From  [TempExchangeRates] A
 Cross Apply ( Select period = try_convert(date,[Key]+'-01')
                     ,Value  = try_convert(float,value) 
               From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper )) 
               Where [Key] not in ('currency (Libellés)','Currency Code')
             ) B

Возвращает

enter image description here

...