nada
nada

Reputation: 21

Fill a table from CSV file with stored procedure

I want to import data from this SQL table:

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
) 

With sample data:

enter image description here

To this one:

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,
)

Now I want to call a stored procedure to get fill the real table like that:

I start with stored procedure like that but I'm not sure how I could do that

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

Upvotes: 0

Views: 1879

Answers (1)

John Cappelletti
John Cappelletti

Reputation: 81940

This question is lacking in details

Assuming the TempExchangeRates columns will vary as time goes on, here is a option that will dynamically UNPIVOT the data so it can be inserted into your final structure.

Example (or 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

Returns

enter image description here

Upvotes: 3

Related Questions