
Announcements
Hi All,
Looking for some advice on importing .CSV data into a SQL database. I want to create a folder that automatically imports any .CSV files dropped into it onto a SQL database, then moves the .CSV to an archive folder. I don't need to analyse any of the data as it will all be in the same format and column structure. Is this possible with Power Automate?
Thanks
Using Azure SQL Database, older versions might be possible as well, you'll just have to look up the string_split function or steal an equivalent user defined function from the internet.
In a very round about way yes. There are several blogs if you search google on how to do it exclusively in power automate, but I found it easier to do it in SQL.
Using power automate, get the file contents and dump it into a staging table. From there run some SQL scripts over it to parse it out and clean up the data:
DECLARE @CSVBody VARCHAR(MAX)
SET @CSVBody=(SELECT TOP 1 NCOA_PBI_CSV_Holding.FileContents
FROM NCOA_PBI_CSV_Holding)
/*CREATE TABLE NCOA_PBI_CSV_Holding
(FileContents VARCHAR(MAX))*/
SET @CSVBody=REPLACE(@CSVBody,'\r\n','~')
SET @CSVBody=REPLACE(@CSVBody,CHAR(10),'~')
SELECT * INTO #Splits
FROM STRING_SPLIT(@CSVBody,'~')
WHERE [value] NOT LIKE '%ADDRLINE1,ADDRLINE2,ADDRLINE3,ANKLINK%'
UPDATE #Splits
SET value = REPLACE(value,CHAR(13),'')
TRUNCATE TABLE NCOA_PBI_CSV_Holding
SELECT dbo.UFN_SEPARATES_COLUMNS([value],1,',') ADDRLINE1
,dbo.UFN_SEPARATES_COLUMNS([value],2,',') ADDRLINE2
,dbo.UFN_SEPARATES_COLUMNS([value],3,',') ADDRLINE3
/*,dbo.UFN_SEPARATES_COLUMNS([value],4,',') ANKLINK
,dbo.UFN_SEPARATES_COLUMNS([value],5,',') ARFN*/
,dbo.UFN_SEPARATES_COLUMNS([value],6,',') City
/*,dbo.UFN_SEPARATES_COLUMNS([value],7,',') CRRT
,dbo.UFN_SEPARATES_COLUMNS([value],8,',') DPV
,dbo.UFN_SEPARATES_COLUMNS([value],9,',') Date_Generated
,dbo.UFN_SEPARATES_COLUMNS([value],10,',') DPV_No_Stat
,dbo.UFN_SEPARATES_COLUMNS([value],11,',') DPV_Vacant
,dbo.UFN_SEPARATES_COLUMNS([value],12,',') DPVCMRA
,dbo.UFN_SEPARATES_COLUMNS([value],13,',') DPVFN
,dbo.UFN_SEPARATES_COLUMNS([value],14,',') ELOT
,dbo.UFN_SEPARATES_COLUMNS([value],15,',') FN*/
,dbo.UFN_SEPARATES_COLUMNS([value],16,',') Custom
/*,dbo.UFN_SEPARATES_COLUMNS([value],17,',') LACS
,dbo.UFN_SEPARATES_COLUMNS([value],18,',') LACSLINK*/
,dbo.UFN_SEPARATES_COLUMNS([value],19,',') LASTFULLNAME
/*,dbo.UFN_SEPARATES_COLUMNS([value],20,',') MATCHFLAG
,dbo.UFN_SEPARATES_COLUMNS([value],21,',') MOVEDATE
,dbo.UFN_SEPARATES_COLUMNS([value],22,',') MOVETYPE
,dbo.UFN_SEPARATES_COLUMNS([value],23,',') NCOALINK*/
,CAST(dbo.UFN_SEPARATES_COLUMNS([value],24,',') AS DATE) PRCSSDT
/*,dbo.UFN_SEPARATES_COLUMNS([value],25,',') RT
,dbo.UFN_SEPARATES_COLUMNS([value],26,',') Scrub_Reason*/
,dbo.UFN_SEPARATES_COLUMNS([value],27,',') STATECD
/*,dbo.UFN_SEPARATES_COLUMNS([value],28,',') SUITELINK
,dbo.UFN_SEPARATES_COLUMNS([value],29,',') SUPPRESS
,dbo.UFN_SEPARATES_COLUMNS([value],30,',') WS*/
,dbo.UFN_SEPARATES_COLUMNS([value],31,',') ZIPCD
,dbo.UFN_SEPARATES_COLUMNS([value],32,',') Unique_ID
--,CAST(dbo.UFN_SEPARATES_COLUMNS([value],32,',') AS INT) Unique_ID
,CAST(NULL AS INT) Dedup_Priority
,CAST(NULL AS NVARCHAR(20)) CIF_Key
INTO #ParsedCSV
FROM #splits-- STRING_SPLIT(@CSVBody,'~')
--WHERE [value] NOT LIKE '%ADDRLINE1,ADDRLINE2,ADDRLINE3,ANKLINK%'
ALTER FUNCTION [dbo].[UFN_SEPARATES_COLUMNS](
@TEXT varchar(8000)
,@COLUMN tinyint
,@SEPARATOR char(1)
)RETURNS varchar(8000)
AS
BEGIN
DECLARE @pos_START int = 1
DECLARE @pos_END int = CHARINDEX(@SEPARATOR, @TEXT, @pos_START)
WHILE (@COLUMN >1 AND @pos_END> 0)
BEGIN
SET @pos_START = @pos_END + 1
SET @pos_END = CHARINDEX(@SEPARATOR, @TEXT, @pos_START)
SET @COLUMN = @COLUMN - 1
END
IF @COLUMN > 1 SET @pos_START = LEN(@TEXT) + 1
IF @pos_END = 0 SET @pos_END = LEN(@TEXT) + 1
RETURN SUBSTRING (@TEXT, @pos_START, @pos_END - @pos_START)
END