我在从xml文件加载数据时遇到了一些严重问题。我想将它声明为带有.xml文件名作为参数的过程。
GO
ALTER PROCEDURE loadXML
@FileName varchar(50)
AS
BEGIN
DECLARE @XML AS XML,@hDoc AS INT
SELECT @XML = CONVERT(XML, BulkColumn)
FROM OPENROWSET(BULK 'D:\ '+@FileName , SINGLE_BLOB) AS x;
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
INSERT INTO [dbo].[Client]
SELECT *
FROM OPENXML(@hDoc, 'orderType/client')
WITH
(
OrderId varchar(200) '../../../sn',
Client_number varchar(200) 'client_number',
FirstName varchar(200) 'firstname',
LastName varchar(200) 'lastname',
E-Mail varchar(200) 'email'
)
EXEC sp_xml_removedocument @hDoc
END
exec loadXML 'order2.xml'
显然,这段代码不起作用,因为@FilePath变量附近有语法错误。我尝试用整个SELECT部分制作字符串变量,但它不起作用。
答案 0 :(得分:1)
为什么不将整个路径与驱动器名称一起作为参数传递。我的意思是D:\folder1\file.xml
。
假设@FileName
参数具有D:\folder1\file.xml
之类的完整路径,那么您可以使用动态查询来实现您正在寻找的内容,如下所示。试一试
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'set @XML = (SELECT '+ @XML + ' = CONVERT(XML, BulkColumn)
FROM OPENROWSET(BULK ' + @FileName +' , SINGLE_BLOB) AS x)';
declare @xml xml;
EXEC sp_executesql @sqlCommand, N'@XYZ xml output', @xml output
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XYZ;
//rest of the code here