Har följande: ... om jag har fattat det rätt, så krånglar du till det. ok, har en kolumn i tabellen GamlaAnvandare vid namn Anvandare (XML datatyp). Här ligger användarna sparade med xml-text. ... ahaaaa en kolumn med XML datatyp, då blir det något annat. tack, men det vill inte fungera. Har försökt även försökt med: hmmmm jag provade den först och den fungerade utmärkt. japp, provade rakt av, försöker med den andra nu, men får inte fram något, bara NULL. Man utgår väll från @doc.nodes när man ska hämta ut i sqlqct satsen? Mmmm... det löste sig.Problem med XQuery
<code>
DECLARE @xmlDoc XML, @handle INT, @createid int
SET @xmlDoc = (select Anvandare FROM GamlaAnvandare WHERE id = @id)
EXEC sp_xml_preparedocument @handle OUTPUT, @xmlDoc;
INSERT INTO Anvandare
SELECT * FROM
OPENXML(@handle, '/Anvandare',2)
WITH
(
namn VARCHAR(50) 'NAMN',
anvandarnamn CHAR(15) 'Anv',
)
</code>
Men när jag kör följande får jag felmeddelandet:
XML parsing error: Expression does not return a DOM node.
på raden:
INSERT INTO Anvandare
Hur kan man lösa detta??
Anv: MSSQL
Tacksam för all hjälp Sv: Problem med XQuery
Eftersom du nu ska hämta data från en annan tabell behöver du inte "krångla" till det och ta "omvägen" via XML.
Gammal hederlig SQL räcker.
Bygger upp frågan utifrån den tabellstruktur du visat förut.
Förutsätter att dom andra fälten/kolumnerna inte är satta till NOT NULL.
<code>
INSERT INTO anvandare (namn)
SELECT Anvandare FROM GamlaAnvandare WHERE id = @id
</code>
Borde räcka (om jag inte missuppfattat det).
[EDIT]
Såg nu också att du läser ut ett värde från GamlaAnvandare, men försöker att skriva in två till anvandare.
Du får förklara hur du tänkt.
/HåkanSv:Problem med XQuery
typ
<anvandare>
<namn></namn>
<anvandarnamn></anvandarnamn>
</anvandare>
Nu vill jag hämta ut allt det som står i xml texten o lägga in i tabellen anvandare.
Men när jag kör koden får jag:'
XML parsing error: Expression does not return a DOM node. Sv: Problem med XQuery
Pröva detta (har justerat din kod lite grand):
<code>
DECLARE @xmlDoc xml, @handle int, @createid int;
SET @xmlDoc = (SELECT Anvandare FROM GamlaAnvandare WHERE id = @id);
EXEC sp_xml_preparedocument @handle OUTPUT, @xmlDoc;
INSERT INTO Anvandare
SELECT * FROM
OPENXML(@handle, '/anvandare')
WITH
(
namn varchar(50) 'namn',
anvandarnamn char(15) 'anvandarnamn'
);
</code>
/HåkanSv:Problem med XQuery
<code>
SET @doc = (select anvandare FROM GamlaAnvandare WHERE id = @id)
select
@doc.value('(./NAMN)[1]','varchar(50)'),
@doc.value('(./ROLLID)[1]','INT'),
from @doc.nodes('//ANVÄNDARE/ROLL/RAD') as N(RAD)
</code>
Som den är nu får jag bara ut NULL, har även provat med:
<code>
SET @doc = (select anvandare FROM GamlaAnvandare WHERE id = @id)
select
@doc.value('(//ANVÄNDARE/ROLL/RAD/NAMN)[1]','varchar(50)'),
@doc.value('(//ANVÄNDARE/ROLL/RAD/ROLLID)[1]','INT'),
from @doc.nodes('//ANVÄNDARE/ROLL/RAD') as N(RAD)
</code>
Men den ger samma värde, dvs den hoppar inte ner till nästa RAD.
Vad kan jag ha gjort för fel??Sv: Problem med XQuery
Kopierade du rakt av?
Annars är det något som inte framkom tidigare.
/HåkanSv:Problem med XQuery
har även provat
<code>
SET @doc = (select anvandare FROM GamlaAnvandare WHERE id = @id)
select
@doc.value('(NAMN)[1]','varchar(50)'),
@doc.value('(ROLLID)[1]','INT'),
from @doc.nodes('//ANVÄNDARE/ROLL/RAD') as N(RAD)
</code>
men den ger oxå bara nullSv: Problem med XQuery
Svaret ligger nog i hur xml filen egentligen ser ut.
Ser att du skrev typ före ditt exempel som jag utgick ifrån.
Stämmer det, eller ser xmlstrukturen annorlunda ut.
Posta den riktiga (hela) här så justerar vi mitt exempel isf.
/HåkanSv:Problem med XQuery
Skulle inte vara
@doc.value('(ROLLID)[1]','INT'),
utan
N.RAD.value('(ROLLID)[1]','INT'),