0

我确实在文件夹中选择了一个文件,谁能帮我选择文件夹中的所有文件进行导入?

SELECT MACHINE = XmlContent.value('(/recordedData/machine)[1]', 'varchar(50)'),
        RecordingDate = XmlContent.value('(/recordedData/date)[1]', 'varchar(50)'),
        RecordingTime = XmlContent.value('(/recordedData/hour)[1]', 'varchar(50)'),
        VariableName = XVar.value('(Name)[1]', 'varchar(50)'),
        VariableValue = XVar.value('(Value)[1]', 'varchar(50)')
FROM ( 
SELECT CAST(XmlContent AS XML)
FROM OPENROWSET(
     BULK 'C:\tmp\20130918_0932_ZSK40-2.xml',

     SINGLE_BLOB) AS T(XmlContent)
     ) AS T(XmlContent)
CROSS APPLY 
    XmlContent.nodes('/recordedData/CollectedData/variable') AS XTbl(XVar)

我认为这应该是文件路径上的一个技巧。感谢帮助!

4

1 回答 1

0

xp_cmdshell如果您的服务器上没有禁用它,您可以解决此问题。本质上,您将能够dir通过它运行命令并解决查询。你可以这样:

declare @sql nvarchar(max) = ''
declare @t table (cmdLineResult varchar(100))
exec xp_cmdshell 'dir C:\tmp\*.xml'
declare @left nvarchar(4000) = N'SELECT MACHINE = XmlContent.value(''(/recordedData/machine)[1]'',    ''varchar(50)''),
    RecordingDate = XmlContent.value(''(/recordedData/date)[1]'', ''varchar(50)''),
    RecordingTime = XmlContent.value(''(/recordedData/hour)[1]'', ''varchar(50)''),
    VariableName = XVar.value(''(Name)[1]'', ''varchar(50)''),
    VariableValue = XVar.value(''(Value)[1]'', ''varchar(50)'')
FROM ( 
SELECT CAST(XmlContent AS XML)
FROM OPENROWSET(
 BULK '
declare @right nvarchar(4000) = N',
 SINGLE_BLOB) AS T(XmlContent)
 ) AS T(XmlContent)
CROSS APPLY 
    XmlContent.nodes(''/recordedData/CollectedData/variable'') AS XTbl(XVar)'
SELECT @sql += ' UNION ALL ' + @left + '''' + cmdLineResult + '''' + @right FROM @t
SET @sql = SUBSTRING (@sql,12,len(@sql)-12)
exec sp_executesql @sql

您需要在这里检查的是: - 目前我无法检查 xp_cmdshell 的输出将是什么样子。您可能需要调整定义,并可能在底部第三行的语句中@t添加WHERE子句。SELECT当我从头开始写它时,这里和那里也可能存在一些小问题。但是,我希望它至少可以为您提供如何解决问题的好主意。

于 2013-09-24T10:52:13.650 回答