我有一個使用文件路徑加載其數據的存儲過程。當我如下所示直接在過程中提供路徑時,該過程將工作並加載數據。將文件的路徑作爲參數傳遞到存儲過程
CREATE PROCEDURE main.usp_importXML(@file VARCHAR)
AS
BEGIN
DECLARE @xmlFile as XML
SET @xmlFile = (SELECT CONVERT(XML,BulkColumn) as BulkColumn
FROM OPENROWSET (BULK 'C:\Users\User\Desktop\people.xml', SINGLE_BLOB) AS t)
INSERT INTO main.tempXML (name,surname,dob,gender,locality,postcode,job,salary,email)
SELECT
name = t.value ('name[1]', 'NVARCHAR(20)'),
surname = t.value ('surname[1]', 'NVARCHAR(20)'),
dob = t.value ('dob[1]', 'DATETIME'),
gender = t.value ('gender[1]', 'CHAR'),
locality = t.value ('locality[1]', 'NVARCHAR(20)'),
postcode = t.value ('postcode[1]', 'NVARCHAR(20)'),
job = t.value ('job[1]', 'NVARCHAR(50)'),
salary = t.value ('salary[1]', 'INTEGER'),
email = t.value ('email[1]', 'NVARCHAR(50)')
FROM @xmlFile.nodes('/persons/person') AS xTable(t);
END
GO
然而,當我試圖通過的路徑作爲參數,如下所示的代碼,就會發生這樣的錯誤:
消息4860,級別16,狀態1,過程usp_importXML,第6行[批量開始第38行]
無法批量加載。文件「+ @文件+」不存在。
代碼:
CREATE PROCEDURE main.usp_importXML(@file VARCHAR)
AS
BEGIN
DECLARE @xmlFile as XML
SET @xmlFile = (SELECT CONVERT(XML,BulkColumn) as BulkColumn
FROM OPENROWSET (BULK '[email protected]+', SINGLE_BLOB) AS t)
INSERT INTO main.tempXML (name, surname, dob, gender, locality, postcode, job, salary, email)
SELECT
name = t.value ('name[1]', 'NVARCHAR(20)'),
surname = t.value ('surname[1]', 'NVARCHAR(20)'),
dob = t.value ('dob[1]', 'DATETIME'),
gender = t.value ('gender[1]', 'CHAR'),
locality = t.value ('locality[1]', 'NVARCHAR(20)'),
postcode = t.value ('postcode[1]', 'NVARCHAR(20)'),
job = t.value ('job[1]', 'NVARCHAR(50)'),
salary = t.value ('salary[1]', 'INTEGER'),
email = t.value ('email[1]', 'NVARCHAR(50)')
FROM
@xmlFile.nodes('/persons/person') AS xTable(t);
END
GO
EXEC main.usp_importXml [C:\Users\User\Desktop\people.xml]
main.tempXML表結構:
CREATE TABLE main.tempXML
(
id UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
[name] VARCHAR(100),
surname VARCHAR(100),
dob VARCHAR(100),
gender VARCHAR(10),
locality VARCHAR(100),
postcode VARCHAR(100),
job VARCHAR(100),
salary VARCHAR(20),
email VARCHAR(100)
);
people.xml數據結構:
<?xml version="1.0"?>
-<persons>
-<person>
<name>Jacob</name>
<surname>Naizer</surname>
<dob>19840717</dob>
<gender>M</gender>
<locality>Mellieha</locality>
<postcode>MEL876</postcode>
<job>JAVA Developer</job>
<salary>20733</salary>
<email>[email protected]</email>
</person>
</persons>
@ Chanter-如果你可以分享xml結構與一些數據。還請分享tempXML表的腳本。 –
@RohitKumar編輯幷包含了表格和xml文件結構 – Chanter
爲什麼要引用''+ @ file +''?我只會使用'@ file'。 – minus