【问题标题】:BULK INSERT from variable Date Filename - ERROR从变量日期文件名批量插入 - 错误
【发布时间】:2018-11-13 13:46:21
【问题描述】:

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

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"'

【问题讨论】:

  • FROM 只接受文字,而不接受表达式(无论如何您的语法都不正确)。如果你想要一个变量文件名,你必须动态构建整个 BULK INSERT 语句 (REPLACE('BULK INSERT [dbo].[test] FROM $f WITH...', '$f', QUOTENAME('E:\test_' + @V_SQL + '.txt', ''''))) 和 EXEC 它。
  • 我试过这样:。但带分隔符的是|。好像不行
  • 这能回答你的问题吗? How to cast variables in T-SQL for bulk insert?

标签: sql sql-server tsql sql-server-2008 sql-server-2012


【解决方案1】:

您不能在其中放置变量或表达式。您需要使用动态 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;

我强烈推荐:

【讨论】:

  • 是的。这是工作。谢谢。如果您有任何动态 SQL 的基础和高级教程。请发给我。
  • @HungNguyen 我有一个很好的how to use dynamic SQL effectively here 示例,还有一个调试技巧here,但您也应该关注SQL 注入(参见thisthis)。跨度>
  • 我真的很感激。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多