Avatar billede royalexport Nybegynder
02. juni 2004 - 22:16 Der er 9 kommentarer

Decimaltal ved indlæsning af XML til SQL Server

Jeg har oprettet en tabel ved navn Varer, som indeholder en attribut vPris, der et decimaltal. Når jeg indlæser en pris i tabellen via XML bliver resutatet .00 Jeg kan ikke få andet frem. Hvad skal der gøres i XML dokumentet så det rigtige decimaltal kommer til at stå der? Se nedenstående:


CREATE TABLE Varer (
        vPris DECIMAL(8,2) NOT NULL,
    );


DECLARE @hdoc int
DECLARE @doc varchar (1000)
Set @doc='
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOT>
        <Varer vPris="105.50" </Varer>

</ROOT>'

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

INSERT Varer
Select *
FROM OPENXML (@hdoc, '/ROOT/Varer')
  WITH Varer
   
EXEC sp_xml_removedocument @hdoc
Avatar billede Slettet bruger
04. juni 2004 - 10:39 #1
Uden at kende så meget til emnet, vil jeg forslå at du skal ændre linien: "DECLARE @hdoc int" til noget andet, så du ikke bruger datatypen int (=heltal).
Avatar billede royalexport Nybegynder
04. juni 2004 - 11:13 #2
Det er SQL Serveren ikke glad for. Fejlen opstår fordi DECLARE @doc varchar (1000)
er sat som varchar, men ændre man den til en anden datatype går det også galt, hvilket er logisk nok. Spørgsmålet er om man er nødt til at dele dokumentet op på en eller anden måde?
Avatar billede Slettet bruger
04. juni 2004 - 11:27 #3
Er din XML rigtig? Skulle det ikke være følgende:

<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOT>
        <Varer>
          <vPris>105.50</vPris>
        </Varer>
</ROOT>'
Avatar billede royalexport Nybegynder
04. juni 2004 - 11:31 #4
XML'en virker fint, når det drejer sig om indlæsning til SQL-server. Den anden måde kan jeg ikke få til at virke, når det skal indlæses i SQL-Server.
Avatar billede venne Nybegynder
04. juni 2004 - 13:29 #5
Din XML er ikke valid. Følgende virker fint hos mig, med decimaler og det hele:


CREATE TABLE Varer (
        vPris DECIMAL(8,2) NOT NULL,
    );


DECLARE @hdoc int
DECLARE @doc varchar (1000)
Set @doc='
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOT>
        <Varer vPris="105.50"/>

</ROOT>'

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

INSERT Varer
Select *
FROM OPENXML (@hdoc, '/ROOT/Varer')
  WITH Varer
   
EXEC sp_xml_removedocument @hdoc
Avatar billede royalexport Nybegynder
04. juni 2004 - 16:39 #6
Hej Venne! Når jeg tager en kopi at det du har ovenfor, så får jeg det problem med at jeg kun kan se .00 i tabellen. Hvad er du siger der så kan være galt?
Avatar billede venne Nybegynder
07. juni 2004 - 09:24 #7
Hvis du i QA laver en simpel select efter ovenstående, fx:

SELECT * FROM Varer

- hvad står der så?
Avatar billede royalexport Nybegynder
07. juni 2004 - 14:38 #8
så står der .00 ved prisen
Avatar billede venne Nybegynder
07. juni 2004 - 15:06 #9
Hvis vi nu for eksperimentets skyld ændrer tabellen til:

CREATE TABLE Varer (
        vPris VARCHAR(20) NOT NULL
)

eller:

CREATE TABLE Varer (
        vPris REAL NOT NULL
)

- hvad sker der så?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester