我的计算机文件夹中有以下名称的文件:
XXX.IN.txt
YYY.TEST.NUM.txt
ABC.AA.Z100.X.E999567777.Y001.txt
ABC.AA.Z100.X.E999568888.Y002.txt
ABC.AA.Z100.X.E999568888.Y003.txt
我想编写一个SQL语句,将具有上述结构的文件插入到表中,以便稍后我可以在其上写一些逻辑。
我已经在我的存储过程中使用了命令行语句来检查文件是否存在:
EXEC master.dbo.xp_fileexist @fullPath, @exist OUTPUT
SET @exist = CAST(@exist AS BIT)
现在,我需要在名称中找到包含字符串的某些文件。我有声明要这样做:
DECLARE @cmdLine VARCHAR(200)
DECLARE @fullPath VARCHAR(900) = '\\my_network_path\MyDir\'
DECLARE @filter VARCHAR(100) = 'ABC.AA.Z100.X.*.txt'
SET @cmdLine = 'dir "' + @fullPath + '"'
EXEC master..xp_cmdshell @cmdLine
上面的命令应该给我以下文件:
ABC.AA.Z100.X.E999567777.Y001.txt
ABC.AA.Z100.X.E999568888.Y002.txt
ABC.AA.Z100.X.E999568888.Y003.txt
CREATE TABLE #FileDetails
(
data VARCHAR(MAX)
)
INSERT #FileDetails(data) EXEC master..xp_cmdshell @cmdLine
但它列出了文件夹
中的所有.txt
个文件
我该如何列出我需要的那些文件
答案 0 :(得分:1)
首先,@ cmdline应设置为高于@fullpath,因为它最终应该适合所有它。
其次,除非我看错了或者你没有在这里纠正它,否则@filter变量不会被使用,所以它会显示每个文件而不管扩展名。
我的代码:
DECLARE @cmdLine VARCHAR(2000)
DECLARE @fullPath VARCHAR(1000) = '\\my_network_path\MyDir\'
DECLARE @filter VARCHAR(100) = 'ABC.AA.Z100.X.*.txt'
SET @cmdLine = 'dir "' + @fullPath + @filter + '"'
EXEC master..xp_cmdshell @cmdLine
我的输出(请记住我在同一个文件夹中创建了一个Test.txt):
10-10-2017 12:17 0 ABC.AA.Z100.X.Y001.txt
10-10-2017 12:18 0 ABC.AA.Z100.X.Y002.txt
10-10-2017 12:18 0 ABC.AA.Z100.X.Y003.txt
答案 1 :(得分:0)
我会使用CLR proc或SSIS脚本来执行此操作,该脚本使用FileSystemObject迭代文件,过滤所需的文件并构建SQL字符串并执行它。
我不知道用直接的TSQL做任何你想做的事情。