5 способов найти CSV-файл в папке с помощью T-SQL

В этой статье блога мы рассмотрим различные способы поиска CSV-файла в папке с помощью T-SQL. Независимо от того, являетесь ли вы разработчиком SQL или администратором базы данных, эти методы пригодятся, когда вам нужно найти определенные файлы в папке. Мы обсудим каждый метод в разговорной форме и приведем примеры кода для лучшего понимания.

Метод 1: использование xp_cmdshell
xp_cmdshell — это расширенная хранимая процедура SQL Server, позволяющая выполнять команды операционной системы. Мы можем использовать эту функцию для поиска файла CSV в папке. Вот пример того, как это можно сделать:

DECLARE @FolderPath VARCHAR(255) = 'C:\Folder\Path\'
DECLARE @Command VARCHAR(8000) = 'DIR /B "' + @FolderPath + '*.csv"'
DECLARE @Files TABLE (FileName VARCHAR(255))
INSERT INTO @Files
EXEC xp_cmdshell @Command
SELECT FileName FROM @Files

Метод 2: использование xp_dirtree
xp_dirtree — это еще одна расширенная хранимая процедура, которую можно использовать для получения древовидной структуры каталогов. Объединив его с оператором LIKE, мы можем фильтровать результаты и находить файлы CSV. Вот пример:

DECLARE @FolderPath VARCHAR(255) = 'C:\Folder\Path\'
SELECT SUBSTRING([subdirectory], LEN(@FolderPath) + 1, 255) AS FileName
FROM master.dbo.xp_dirtree(@FolderPath, 1)
WHERE [file] = 1 AND [subdirectory] LIKE '%.csv'

Метод 3: использование PowerShell из T-SQL
Если на вашем SQL-сервере установлена ​​PowerShell, вы можете выполнять сценарии PowerShell из T-SQL. Вот пример того, как можно использовать PowerShell для поиска файла CSV:

DECLARE @FolderPath VARCHAR(255) = 'C:\Folder\Path\'
DECLARE @PowerShellCommand VARCHAR(8000) = 'Get-ChildItem "' + @FolderPath + '" -Filter *.csv'
EXEC xp_cmdshell 'powershell.exe "' + @PowerShellCommand + '"'

Метод 4: использование интеграции CLR
Интеграция CLR позволяет писать и выполнять код.NET внутри SQL Server. Вы можете создать хранимую процедуру или функцию CLR для поиска CSV-файла в папке. Вот упрощенный пример:

CREATE ASSEMBLY FileSearch
FROM 'C:\Path\To\FileSearch.dll'
WITH PERMISSION_SET = SAFE
CREATE FUNCTION dbo.FindCSVFile(@FolderPath VARCHAR(255))
RETURNS TABLE (FileName NVARCHAR(255))
AS EXTERNAL NAME FileSearch.[FileSearch.FileSearch].FindCSVFile

Метод 5: использование рекурсивного CTE
Рекурсивное общее табличное выражение (CTE) можно использовать для перемещения по структуре папок и поиска файлов CSV. Вот пример:

DECLARE @FolderPath VARCHAR(255) = 'C:\Folder\Path\'
;WITH CTE AS (
    SELECT [subdirectory] AS FileName
    FROM master.dbo.xp_dirtree(@FolderPath, 1)
    WHERE [file] = 1 AND [subdirectory] LIKE '%.csv'
    UNION ALL
    SELECT [subdirectory] AS FileName
    FROM master.dbo.xp_dirtree(@FolderPath + [subdirectory] + '\', 1)
    WHERE [file] = 1 AND [subdirectory] LIKE '%.csv'
)
SELECT FileName FROM CTE

В этой статье мы рассмотрели пять различных методов поиска файла CSV в папке с помощью T-SQL. В зависимости от ваших требований и имеющихся ресурсов вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Эти методы помогут вам эффективно находить файлы CSV в папке, упрощая задачи разработки SQL.