我正在尝试建立一个计划的过程,以便每晚获取通过ftp传输到服务器的文件,并对内容进行批量插入。
我面临的问题是文件名每天都随着日期/时间戳更改。我需要构建以下SQL命令:
BULK INSERT TableName
FROM '\\server\directory_name1\directory_name2\date_time_filename.csv'
“ filename.csv”永不更改,文件所进入的目录也永不更改,并且应该按计划进行。
它并不总是成功地做到这一点。因此,即使我能以某种方式将CONCAT
date, time, and filename
放入FROM
语句中,该文件也可能不存在,因为它通常无法到达那里。
我也不认为我可以CONCAT
变成@variable
并像在FROM @variable
中那样在FROM中使用它。有人知道这是否可能吗?
。
接下来,我想我将看一下访问目录并浏览它的文件,但这似乎有点麻烦
答案 0 :(得分:1)
我会做这样的事情:
%sql
select distinct_id, get_json_object(properties, "$.time")
from my_table
答案 1 :(得分:0)
非常感谢。那解决了问题。我通过添加各种配置设置的CONCAT来添加它。另外,服务器脚本在23:00 PM运行,直到第二天我才使用该文件,因此日期要过一天。所以我不得不做一些DATEADD工作。我做了2次CONCATS,以使其更易于使用。引号太多,不能双引号,等等。这令人困惑。我完成的代码是这样的:
DECLARE @sqlCmd NVARCHAR(400);
DECLARE @now DATETIME2 = GETDATE();
SET @sqlCmd = CONCAT(
'BULK INSERT dbo.MyTable FROM ''', '\\server\directory1\directory2\'
, FORMAT((SELECT DATEADD(DAY, -1, @now)), 'yyyy-MM-dd'), '_2300_filename.csv''');
SET @sqlCmd = CONCAT(@sqlCmd,
' WITH ( FIRSTROW = 2,
CODEPAGE=65001,
DATAFILETYPE = ''char'',
BATCHSIZE = 50,
FIELDTERMINATOR = '';'',
ROWTERMINATOR = ''0x0A''
);'
);