1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Upload nhiều file XML vào cột kiểu dữ liệu XML pdf

8 316 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Upload nhiều file XML vào cột kiểu dữ liệu XML
Thể loại Tài liệu
Năm xuất bản 2007
Định dạng
Số trang 8
Dung lượng 233,53 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Upload nhiều file XML vào cột kiểu dữ liệu XML Nguồn : quantrimang.com Các quản trị viên cơ sở dữ liệu CSDL SQL Server thường có một số nhu cầu như import nhiều file vào một bảng trong C

Trang 1

Upload nhiều file XML vào cột kiểu dữ liệu XML

Nguồn : quantrimang.com 

Các quản trị viên cơ sở dữ liệu (CSDL) SQL Server thường có một số nhu cầu như import nhiều file vào một bảng trong CSDL Bài này sẽ thảo luận đến việc làm thế nào để upload nhiều file (đặc biệt là file XML) vào cột kiểu

dữ liệu XML của CSDL SQL Server

Điều kiện cần

a Phải đảm bảo xp_cmdshell đã được cho phép Nếu chưa được, hãy thực thi

một số câu lệnh dưới đây

use master

go

sp_configure 'show advanced options',1

go

reconfigure with override

go

sp_configure 'xp_cmdshell',1

go

reconfigure with override

go

b Tạo một CSDL và bảng được dùng cho việc import này bằng các câu lệnh dưới Nếu không bạn có thể sử dụng CSDL đang có sẵn

USE [master]

GO

/****** Object: Database [XMLTest]

Script Date: 04/17/2007 01:49:43 ******/

IF EXISTS (SELECT name FROM sys.databases WHERE name =

N'XMLTest')

DROP DATABASE [XMLTest]

go

create database XMLTest

go

use XMLTest

go

c Đảm bảo rằng bạn đã tạo một bảng với kiểu dữ liệu XML Ngoài ra, hãy chắc

Trang 2

chắn có ít nhất một cột trong bảng có thể chứa giá trị của tên file như sau

use [XMLTest]

/****** object: table [dbo].[myimage]

script date: 09/10/2006 21:55:46 ******/

if exists (select * from sys.objects

where object_id = object_id(N'[MYXML]') and type in (N'u')) drop table [MYXML]

go

create table [MYXML] (

[id] int identity(1,1),

[XML File Name] varchar(100),

[Data] XML)

Go

d Giả sử bạn muốn upload toàn bộ file bmp từ thư mục C:\XML (tham khảo hình 1 và 2) vào bảng “MYXML” trong lược đồ “dbo” trên CSDL “XMLTest”

Hình 1 Nội dung ví dụ Customer5.xml

<?xml version="1.0" standalone="yes"?>

<Customer>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

<user>Rainbow.River</user>

<Userid>1AE</Userid>

<ls>A-Accessible</ls>

<eqtid>761</eqtid>

<es>Stopped</es>

<tp>30</tp>

</CustomerLogInfo>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

Trang 3

<user>Rainbow.River</user>

<Userid>1AE</Userid>

<ls>Not-Accessible</ls>

<eqtid>870</eqtid>

<es>Stopped</es>

<tp>30</tp>

</CustomerLogInfo>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

<user>Rainbow.River</user>

<Userid>1AE</Userid>

<ls>A-Accessible</ls>

<eqtid>97F</eqtid>

<es>Started</es>

<tp>30</tp>

</CustomerLogInfo>

</Customer>

e Hãy tạo một thủ tục usp_uploadXMLFilesm [sử dụng copy và paste đoạn mã dưới đây hoặc download file usp_uploadXMLFiles có sẵn] Việc tạo này là tạo một thủ tục lưu trữ usp_uploadXMLfiles trên csdl chủ vì vậy nó có thể thực thi và gọi bất kỳ csdl nào

USE [master]

GO

/****** Object: StoredProcedure

[dbo].[usp_uploadXMLfiles] Script Date: 09/10/2006

23:33:34 ******/

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_uploadXMLfiles]') AND type in (N'P', N'PC'))

DROP PROCEDURE [dbo].[usp_uploadXMLfiles]

go

set quoted_identifier off

go

create procedure usp_uploadXMLfiles

@databasename varchar(128),

@schemaname varchar(128),

@tablename varchar(128),

@FileNameColumn varchar(128),

@xmlcolumn varchar(128),

@path varchar(500),

@filetype varchar(10),

@printorexec varchar(5) = 'print'

Trang 4

as

set nocount on

declare @dircommand varchar(1500)

declare @insertquery varchar(2000)

declare @updatequery varchar(2000)

declare @count int

declare @maxcount int

declare @filename varchar(500)

set @count=1

set @dircommand = 'dir /b '+@path+@filetype

create table #dir (name varchar(1500))

insert #dir(name) exec master xp_cmdshell @dircommand delete from #dir where name is NULL

create table #dir2 (id int identity(1,1),name

varchar(1500))

insert into #dir2 select name from #dir

select * from #dir2

set @maxcount = ident_current('#dir2')

print 'set quoted_identifier off'

print 'go'

while @count <=@maxcount

begin

set @filename =(select name from #dir2 where id = @count) set @insertquery = 'Insert into

['+@databasename+'].['+@schemaname+'].['+@tablename+'] ([' +@filenamecolumn +']) values ("'+@filename+'")'

set @updatequery = 'update

['+@databasename+'].['+@schemaname+'].['+@tablename+'] set ['+@xmlcolumn+'] = (SELECT * FROM OPENROWSET(BULK

"'+@path+@filename+'", SINGLE_BLOB)AS x )

WHERE ['+@filenamecolumn +']="'+@filename+'"'

if @printorexec ='print'

begin

print @insertquery

print @updatequery

end

if @printorexec ='exec'

begin

set @insertquery='set quoted_identifier off' +

char(10)+char(13)+@insertquery

set @updatequery='set quoted_identifier off' +

char(10)+char(13)+@updatequery

exec (@insertquery)

exec (@updatequery)

Trang 5

end

set @count = @count +1

end

go

Thủ tục này chấp nhận các tham số sau:

@databasename = Tên của csdl có giản đồ và bảng đang tồn tại

@schemaname = Giảm đồ csdl có bảng đang tồn tại

@tablename = Tên của bảng có các file sẽ được upload

@FileNameColumn = Tên của cột trong bảng có tên file để lưu trữ

@XMLcolumn = Cột kiểu dữ liệu XML hiện tại có file sẽ được lưu trữ như XML

@path = Đường dẫn của tất cả các file cần có để upload Ví dụ “C:\Windows\”

@filetype = Loại file muốn upload Ví dụ “*.XML”

@printorexec = Nếu “Print” được đặt như một tham số, nó sẽ tự tạo ra và hiển thị các lệnh Nếu “Exec” được đặt như một tham số, nó sẽ ngay lập tức thực thi câu lệnh có ý nghĩa upload tất cả các file

f Thực thi thủ tục với tham số printorexec=’print’ theo đoạn mã dưới đây

Exec master [usp_uploadXMLfiles]

@databasename ='XMLTest',

@schemaname ='dbo',

@tablename ='MYXML',

@FileNameColumn ='XML File Name',

@XMLcolumn = 'Data',

@path = 'c:\XML\',

@filetype ='*.xml',

@printorexec ='print'

Thủ tục này sẽ tự tạo ra tất cả các câu lệnh cần thiết cho việc tạo một dòng cho từng file và update dòng với file thuộc tính theo đoạn mã sau

set quoted_identifier off

go

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name])

Trang 6

values ("Customer1.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer1.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer1.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer2.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer2.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer2.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer3.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer3.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer3.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer4.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer4.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer4.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer5.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer5.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer5.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer6.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer6.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer6.xml"

Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer7.xml")

update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT * FROM OPENROWSET(BULK "c:\XML\Customer7.xml",

SINGLE_BLOB)AS x )

WHERE [XML File Name]="Customer7.xml"

g Thực thi thủ tục với tham số printorexec=’exec’ theo đoạn mã dưới

Trang 7

Exec master [usp_uploadXMLfiles]

@databasename ='XMLTest',

@schemaname ='dbo',

@tablename ='MYXML',

@FileNameColumn ='XML File Name',

@XMLcolumn = 'Data',

@path = 'c:\XML\',

@filetype ='*.xml',

@printorexec ='exec'

Đoạn mã sẽ upload toàn bộ các file xml

h Giờ thì chúng ta sẽ truy vấn bảng sử dụng câu lệnh SQL thực hiện như đoạn dưới

use XMLTest

go

select * from myxml

go

Thủ tục này sẽ trả về kết quả như hình 2:

Hình 2

i Kích lên các kết nối dữ liệu XML để phát sinh kết quả như dưới đây

<Customer>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

<user>Dancing.Doll</user>

<Userid>1AE</Userid>

<ls>A-Accessible</ls>

<eqtid>761</eqtid>

<es>Stopped</es>

<tp>30</tp>

Trang 8

</CustomerLogInfo>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

<user>Dancing.Doll</user>

<Userid>1AE</Userid>

<ls>Not-Accessible</ls>

<eqtid>870</eqtid>

<es>Stopped</es>

<tp>30</tp>

</CustomerLogInfo>

<CustomerLogInfo>

<Date>2007-03-31T06:40:38.0000000-05:00</Date>

<user>Dancing.Doll</user>

<Userid>1AE</Userid>

<ls>A-Accessible</ls>

<eqtid>97F</eqtid>

<es>Started</es>

<tp>30</tp>

</CustomerLogInfo>

</Customer>

 

Ngày đăng: 25/01/2014, 00:20

HÌNH ẢNH LIÊN QUAN

Hình 1  Nội dung ví dụ Customer5.xml - Tài liệu Upload nhiều file XML vào cột kiểu dữ liệu XML pdf
Hình 1 Nội dung ví dụ Customer5.xml (Trang 2)

TỪ KHÓA LIÊN QUAN

w