带有FileName变量的SQL Server存储过程

时间:2014-05-09 13:54:34

标签: sql-server stored-procedures

我在从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部分​​制作字符串变量,但它不起作用。

1 个答案:

答案 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