2011-01-21 1 views
5

mia struttura della tabella èCome inserire i dati XML in tabella in sql server 2005

CREATE TABLE [dbo].[Emp](
    [ID] [int] NOT NULL, 
    [EmpName] [varchar](50) NOT NULL, 
    [Sal] [int] NULL, 
) 

in questa tabella emp voglio inserire i dati da una stringa XML

l'XML è

<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp> 
<ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record> 

supponiamo che questo xml sia memorizzato in una variabile nella mia procedura di archiviazione e voglio solo inserire questo xml in modo tale che nella tabella EMP come risultato i dati ID verranno inseriti nella colonna ID, i dati EmpName verranno inseriti in EmpName colum i dati di n e Sal verranno inseriti nella colonna Sal.

quindi per favore dimmi come scrivere il codice nella procedura di archiviazione.

grazie

risposta

9

Assumendo XML di esempio come sopra:

<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Emp> 
     <ID>3</ID> 
     <EmpName>Dibyendu</EmpName> 
     <Sal>3500</Sal> 
    </Emp> 
</Record> 

Assumendo la seguente tabella:

CREATE TABLE Employee 
(
    [ID] [int] NOT NULL, 
    [EmpName] varchar(max) NOT NULL, 
    [Sal] [int] NULL 
) 

La seguente stored procedure, che utilizza XPath, dovrebbe fare il trucco

CREATE PROCEDURE AddEmployee 
    @empXml xml 
AS 

INSERT INTO Employee 
(
    ID, 
    EmpName, 
    Sal 
) 
VALUES 
(
    @empXml.value('(/Record/Emp/ID)[1]', 'int'), 
    @empXml.value('(/Record/Emp/EmpName)[1]', 'varchar(max)'), 
    @empXml.value('(/Record/Emp/Sal)[1]', 'int') 
) 

che è quindi possibile eseguire con:

exec AddEmployee '<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record>' 

Sarà necessario fare un piccolo refactoring se il Record XML potesse potenzialmente includere più elementi 'Emp'.

+0

grazie mille per completare l'esempio. – Thomas

+0

Se stai cercando di fare una cosa simile con più elementi, questa domanda dovrebbe avere la risposta: http://stackoverflow.com/questions/1554792/iterating-xml-data-in-sql-server-2005 – psych

4

Date un'occhiata a qualcosa come

DECLARE @Xml XML 

DECLARE @Emp TABLE(
     [ID] [int] NOT NULL, 
     [EmpName] varchar NOT NULL, 
     [Sal] [int] NULL 
) 

SELECT @Xml = '<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record>' 

SELECT @Xml.value('(/Record/Emp/ID)[1]', 'int') ID, 
     @Xml.value('(/Record/Emp/EmpName)[1]', 'VARCHAR(MAX)') EmpName, 
     @Xml.value('(/Record/Emp/Sal)[1]', 'int') Sal 

E se si dovesse avere più righe si può provare qualcosa di simile

DECLARE @Xml XML 

SELECT @Xml = '<Record><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp><Emp><ID>4</ID><EmpName>TADA</EmpName><Sal>5</Sal></Emp></Record>' 

SELECT A.B.value('(ID)[1]', 'int') ID, 
     A.B.value('(EmpName)[1]', 'VARCHAR(MAX)') EmpName, 
     A.B.value('(Sal)[1]', 'int') Sal 
FROM @Xml.nodes('/Record/Emp') A(B)