Создать, удалить или добавить CSV - C # или хранимую процедуру SQL Server - PullRequest
0 голосов
/ 13 октября 2018

Я создал запрос, который генерирует файл CSV (в данный момент он не работает должным образом), но мне нужно обновлять его каждые 15 минут.Я вижу, что это делается либо добавлением данных, либо удалением CSV, а затем перезаписью его со всеми соответствующими данными.Данные взяты из таблицы, которая обновляется каждые 15 минут из хранимой процедуры.Имя файла не может быть изменено.

Я читал, что вы не можете удалить или добавить файл CSV с помощью SQL, будь то BCP или любым другим способом.

Является ли подходящим способом написать сервис на C # для этого или есть способ сделать это на SQL.Я не уверен, что мой запрос тоже правильный.

Мой запрос:

DECLARE @_FilePath NVARCHAR(MAX)
DECLARE @_FileName NVARCHAR(MAX)
DECLARE @_SerialNumber NVARCHAR(MAX) 
DECLARE @_OutputPath NVARCHAR(MAX)

CREATE TABLE #tmp
(
    SerialNumber NVARCHAR(75),
    CustomerName NVARCHAR(MAX),
    Processed BIT,
    FolderLocation NVARCHAR(MAX)
)

INSERT INTO #tmp
    SELECT d.SerialNumber, d.CustomerName, 0, f.folderLocation 
    FROM Staging.Device d
    INNER JOIN Staging.FtpFolders f ON d.CustomerName = f.CustomerName     

WHILE (SELECT COUNT(*) FROM #tmp WHERE Processed = 0) > 0
BEGIN
    SET @_SerialNumber = (SELECT TOP 1 SerialNumber FROM #tmp 
                          WHERE Processed = 0 AND SerialNumber IS NOT NULL)

    SELECT TOP 1 @_FilePath = FolderLocation 
    FROM #tmp 
    WHERE Processed = 0 AND SerialNumber = @_SerialNumber

    SELECT @_FileName = CONVERT(DateTime, DATEDIFF(DAY, 0, GETDATE()))

    SET @_OutputPath = @_FilePath + '\' + @_FileName + '.csv'

    UPDATE #tmp 
    SET Processed = 1 
    WHERE SerialNumber = @_SerialNumber         

    SELECT @_OutputPath

    DECLARE @ExportSQL NVARCHAR(MAX);               

    SET @ExportSQL = N'EXEC master.dbo.xp_cmdshell ''bcp "SELECT * FROM [Staging].[PivotedData15]" queryout "' + @_OutputPath + '" -T -c -t -S '''              
END 

DROP TABLE #tmp
...