我一直在寻找如何获取使用SQL Server的文件名的解决方案。我知道你可以使用C#。但是如何在SQL中完成?
例如,我有一个位于C:\的文件(例如:uploadfile.txt)即将上传。我有一个表有一个字段“文件名”。如何获取此文件的文件名?
这是我目前的剧本。
-- Insert to table
BULK INSERT Price_Template_Host
FROM 'C:\uploadfile.txt'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
-- Insert into transaction log table filename and datetime()
答案 0 :(得分:1)
据我所知,在T-SQL 中没有直接的方法来定位文件系统上的文件。毕竟这不是该语言的用途。从您提供的脚本中,BULK INSERT要求在语句调用时已经知道完全限定的文件名。
当然,除了使用T-SQL(例如使用SSIS)之外,还有多种方法可以识别/定位文件,也许您可以使用xp_cmdshell(有安全警告)或创建托管SQL Server中的代码模块,用于执行此任务。
为了向您提供具体的指导,如果您能向我们提供您尝试实施的业务流程的详细信息,可能会有所帮助。
答案 1 :(得分:1)
我个人会将此问题与SSIs软件包相关联,这样可以在加载和后续日志记录方面提供更大的灵活性。但是,如果您通过T-SQL开始这样做,请考虑执行动态构造的SQL:
declare @cmd nvarchar(max), @filename nvarchar(255)
set @filename = 'C:\uploadfile.txt'
set @cmd =
'BULK INSERT Price_Template_Host
FROM '''+@filename+'''
WITH
(
FIELDTERMINATOR = ''\t'',
ROWTERMINATOR = ''\n''
)'
-- Debug only
print @cmd
-- Insert to table
exec(@cmd)
-- Insert into transaction log table filename and datetime()
insert into dbo.LoadLog (filename, TheTime)
values (@filename, getdate())
如果我正确理解了你的问题,这就会使文件名分类,以便你可以在脚本中进一步捕捉它。