Insert do tabeli z kolumną XML

0

Witam, utworzyłem taką tabelę:

 create table
TerminyXML (doc XML(schemat), od Date, do Date)

i chcę do niej teraz insertować, tyle że przy pierwszej próbie już mam jakiś błąd, nie bardzo wiem co może być źle

 insert into  TerminyXML values
('declare @od date
declare @do date
set @od = '2016-11-05'
set @do = '2016-11-30'
--drop table #nowa
create table #nowa (od date, do date)
insert into #nowa values(@od,@do)

select od, do,
	(select 
	L.Imie as imie
	,L.Nazwisko as nazwisko
	,
		(																	
  		select
  		T2.Dzien as data
  		,T2.OdGodziny as godzina_od
  		,T2.DoGodziny as godzina_do
  		,G2.Nazwa as nazwaGabinetu
  
  		from
  		Terminy T2 join Gabinety G2 on G2.Id=T2.IdGabinetu
  		where T2.IdLekarza=L.Id
   		for xml raw ('Termin'), type
		) as 'Terminy'
	from 
	Lekarze L 
	for xml  raw('Lekarz'), type
	)as 'Lekarze' 
	from #nowa
	for xml raw ('Przychodnia'), type
',@od,@do)
0

Wysil się i napisz jaki ten błąd. :)

1

@stonka95: jak rozumiem XML-a w MSSQL wałkujesz od jakiegoś czasu, ale czasem warto zrobić krok w tył, aby opanować podstawy.

Składnia insert jest ZAWSZE taka sama:

insert into tabela (pole1, pole2) values ('warosc1','wartosc2')
--ewentualnie z selectem
insert into tabela (pole1, pole2) 
select pole2, pole4 from tabela1

Nie mam tam miejsca na skrypty, więc wiedząc jakie są podstawy:

declare @od date
declare @do date

set @od = '2016-11-05'
set @do = '2016-11-30'
--drop table #nowa

create table #nowa (od date, do date)

insert into #nowa values(@od,@do)

insert into  TerminyXML (doc, od, do)
values
(
	(select 
		od
		,do
		,(
			select 
				od
				,do
				,(select 
					L.Imie as imie
					,L.Nazwisko as nazwisko
					,(select
						T2.Dzien as data
						,T2.OdGodziny as godzina_od
						,T2.DoGodziny as godzina_do
						,G2.Nazwa as nazwaGabinetu
					from
						Terminy T2 
						join Gabinety G2 on G2.Id=T2.IdGabinetu
					where 
						T2.IdLekarza=L.Id
					for xml raw ('Termin'), type)
				) as 'Terminy'
			from 
				Lekarze L 
			for xml  raw('Lekarz'), type
		) as 'Lekarze' 
	from 
		#nowa 
		for xml raw ('Przychodnia'), type
	)
	,@od
	,@do
)
0

ok, fakt, drobne niedopatrzenie ;/ teraz wydaje mi się najtrudniejsza część mojego zadania, bo na podstawie tej uzupełnionej tabeli TerminyXML mam wygenerować zestawienie, które będzie dotyczyło zadanego okresu. Zestawienie ma zawierać ImięLekarza, NazwiskoLekarza, ileDniPrzyjmuje. Zacząłem coś rzeźbić, o ile o rzeźbieniu można mówić jak się raczkuje w XML'u

 SELECT
	doc.value('count(/Przychodnia/Lekarze/Lekarz/Terminy/Termin)', 'int'),
	doc.value('(/Przychodnia/Lekarze/Lekarz/@imie)[1]', 'nvarchar(80)') as [imie],
	doc.value('(/Przychodnia/Lekarze/Lekarz/@nazwisko)[1]', 'nvarchar(80)') as [nazwisko]
FROM
    TerminyXML

Jedyną rzeczą, która dobrze tutaj działa to to, że zlicza dobrze ilość wizyt w danym terminie, bo w tabeli TerminyXML utworzyłem 4 krotki, które odpowiadają 4 tygodniom i np w pierwszym tygodniu nie było żadnej wizyty to wyświetla to moje zestawienie wartość 0, a w 4 tygodniu gdzie było 5 wizyt wartość 5, tyle że to imię i nazwisko Lekarza, to bierze po prostu pierwsze imię i nazwisko z pierwszej krotki w tabeli, a tu chodzi o to, aby zliczało do danego lekarza mi te wizyty a nie tylko w danej krotce

0

Zacznij po kolei i nie rozwiązuj wszytkiego w jednym wątku, proponuje, założenie nowego z przykładowymi danymi XML i oczekiwanymi rezultatami...

0

tyle, że to wszystko się łączy ze sobą, począwszy od wygenerowania XML'a

0

ale skoro tak proponujesz to tak zrobię :D

0

Ja wiem, że to się lączy w Twoim wypadku, ale forum ma pomagać i nikt raczej nie będzie szukal rozwiązania do wyciągania danych w wątku o insercie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1