8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

将 MinIO bucket 中的 CSV 文件数据读取到 SQL Server

user26504905 2月前

32 0

我需要创建一个存储过程来从 MinIO 存储桶中读取 .CSV 文件。我需要将这些文件中的数据存储到相应的 SQL Server 表中。例如:如果文件是 na...

我需要创建一个存储过程来 .CSV 从 MinIO 存储桶中读取文件。我需要将这些文件中的数据存储到相应的 SQL Server 表中。

例如:如果文件名为 info_sec.csv ,那么我必须将数据存储到 dbo.info_sec 表中。

我们如何在 SQL Server 中实现这一点?

我尝试使用以下代码从本地驱动器获取数据

ALTER   PROCEDURE [dbo].[InsertDataFromCSVDirectory]
(
  @DirectoryPath NVARCHAR(1000),  -- Directory path containing CSV files
  @DateParam DATE  -- Date parameter in 'YYYY-MM-DD' format
)
AS
BEGIN
  SET NOCOUNT ON;

  -- Declare variables
  DECLARE @TableName NVARCHAR(100);
  DECLARE @FileNamePattern NVARCHAR(1000);
  DECLARE @Cmd NVARCHAR(1000);
  DECLARE @BulkInsertSQL NVARCHAR(MAX);

  -- Get the date suffix from the parameter
  DECLARE @DateSuffix NVARCHAR(100);
  SET @DateSuffix = CONVERT(NVARCHAR(10), @DateParam, 23);

  -- Get a list of table names to process
  DECLARE @Tables TABLE (TableName NVARCHAR(100));
  INSERT INTO @Tables (TableName)
  VALUES ('emp'), ('dept'), ('invoice'); -- Add more table names if needed

  -- Loop through each table
  DECLARE tableCursor CURSOR FOR
  SELECT TableName FROM @Tables;
  OPEN tableCursor;
  FETCH NEXT FROM tableCursor INTO @TableName;
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- Build the file name pattern
    SET @FileNamePattern = @TableName + '_' + @DateSuffix + '.csv';

    -- Construct the full file path with the directory
    DECLARE @FilePath NVARCHAR(1000);
    SET @FilePath = @DirectoryPath + '\' + @FileNamePattern;

    -- Check if the file exists using xp_cmdshell
    SET @Cmd = 'dir "' + @FilePath + '" /b';

    DECLARE @Result TABLE (Result VARCHAR(1000));
    INSERT INTO @Result
    EXEC xp_cmdshell @Cmd;

    IF NOT EXISTS (SELECT * FROM @Result WHERE Result LIKE '%' + @FileNamePattern + '%')
    BEGIN
      PRINT 'File ' + @FilePath + ' not found for table ' + @TableName + '.';
    END
    ELSE
    BEGIN
      -- Construct the BULK INSERT statement
      SET @BulkInsertSQL = N'
      USE master;
      BULK INSERT dbo.' + QUOTENAME(@TableName) + N'  
      FROM ''' + @FilePath + N'''
      WITH (
        FIELDTERMINATOR = '','',
        ROWTERMINATOR = ''\n'',
        FIRSTROW = 1, 
        KEEPNULLS
      );
      ';

      -- Execute the BULK INSERT statement
      EXEC sp_executesql @BulkInsertSQL;

      PRINT 'Data inserted into ' + @TableName + ' table from file ' + @FilePath + '.';
    END

    FETCH NEXT FROM tableCursor INTO @TableName;
  END;
  CLOSE tableCursor;
  DEALLOCATE tableCursor;
END;
帖子版权声明 1、本帖标题:将 MinIO bucket 中的 CSV 文件数据读取到 SQL Server
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user26504905在本站《t-sql》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我尝试了上面的代码,成功从本地驱动器获取数据,但我的要求是从 minio bucket 获取

返回
作者最近主题: