sql - 从变量日期文件名批量插入 - 错误
问题描述
我正在尝试插入文件名中包含日期时间的文本文件。
declare @V_SQL varchar(100)
set @V_SQL = (select REPLACE(REPLACE(CONVERT(VARCHAR,getdate()-1,106), ' ',''), ',',''))
BULK INSERT [dbo].[test] FROM '"E:\test_"+ @V_SQL +".txt"'
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = '0x0a'
)
GO
当我运行上述内容时,我收到以下消息 -BULK INSERT [dbo].[test] FROM '"E:\test_"+ @V_SQL +".txt"'
解决方案
您不能在其中放置变量或表达式。您需要使用动态 SQL。
DECLARE @sql nvarchar(max) = N'BULK INSERT dbo.test FROM '''
+ 'c:\test_'
+ REPLACE(CONVERT(char(11), DATEADD(DAY,-1,GETDATE()), 13),' ','')
+ ''' WITH
(
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''0x0a''
);';
PRINT @sql;
--EXEC sys.sp_executesql @sql;
我强烈推荐:
- 不使用日期操作的简写(例如
GETDATE()-1
) - 总是声明可变数据类型的长度,例如
varchar
.
推荐阅读
- c++ - 是否有一些输入条件可以让“cin >> someStringValue”评估为“假”?
- python - 如何在 Keras/tf2.0 自定义损失函数中收集与真实标签不对应的 y_pred 元素?
- hdl - 我已经使用原语为 JK 触发器编写了 verilog 代码
- c# - 在winform上获取按钮的父级
- python - 我该怎么做才能保持绿色和透明度?
- web-worker - 使用 std::thread 时无法在“WorkerGlobalScope”上执行“importScripts”
- python - 我已经为模拟BeamRun 编写了代码,当我运行它时它说我有语法错误
- typescript - 检查事件发射器接收到的类型
- r - 从已经汇总的数据中生成方差分析
- error-handling - io.read() 不起作用并使我的文件立即退出