我确实在文件夹中选择了一个文件, 任何人都可以帮助我如何选择导入文件夹中的所有文件?
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)
我认为它应该是文件路径上的一个技巧。 apreciate帮助!
答案 0 :(得分: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
子句添加到底部第3行的SELECT
语句中。在这里和那里也可能存在一些小问题,因为我是从脑袋里写的。但我希望它能给你提供如何解决问题的最佳方法。