我正在尝试插入一个在文件名中包含日期时间的文本文件。
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
这样的可变数据类型的长度