变量Date Filename中的BULK INSERT-ERROR



我正在尝试插入一个在文件名中包含日期时间的文本文件。

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这样的可变数据类型的长度

最新更新