ファイルパスを使用してデータをロードするストアドプロシージャがあります。以下に示す手順でパスを直接指定すると、プロシージャは機能し、データがロードされます。私は、パラメータとしてパスを渡ししようとすると、しかし、コードは以下のようストアドプロシージャのパラメータとしてファイルのパスを渡す
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行目]
バルクロードできません。ファイル "+ @ file +"は存在しません。
コード:
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データ構造:Chanter- @
<?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>
あなたが共有することができた場合のxml構造体いくつかのデータ。 tempXMLテーブルのスクリプトも共有してください。 –
@RohitKumarはテーブルとXMLのファイル構造を編集して入れました – Chanter
なぜあなたは '+ @ file + ''を引用していますか?私は '@file'だけを使用したでしょう。 – minus