【发布时间】:2014-05-09 13:54:33
【问题描述】:
我在从 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 部分制作字符串变量,但没有奏效。
【问题讨论】:
-
FROM OPENROWSET(BULK ' + 'D:\'+@FileName'' , SINGLE_BLOB) AS x;?我会说你的单引号搞砸了。哦,请发布确切的错误消息。 -
好的,我用引号清理了乱七八糟的东西,谢谢。我收到的这个特定代码的错误是:Msg 102, Level 15, State 1, Procedure loadXML, Line 7 Incorrect syntax near '+'.
-
你不能这样连接。最好是像我在回答中提到的那样将整个路径作为参数传递。
标签: sql-server stored-procedures