Skocz do zawartości
Forum użytkowników
Łukasz Kubacki

Struktura pól własnych v2 w bazie danych

Polecane posty

W celu odczytania nazw tabel, w których przechowywane są wartości pól zaawansowanych, należy wykonać poniższe zapytanie:

select
	konf.NazwaWyswietlanaDluga as [Nazwa w module konfiguracji pol wlasnych],
	extensionEntities.TableName as [Tabela z wartosciami pol zaawansowanych]
from ModelDanychContainer.KonfiguracjePolWlasnych2 konf inner join DataExtensions.CurrentExtensionEntities extensionEntities on konf.MetadaneZaawansonychPolWlasnych_Id = extensionEntities.Id
order by konf.NazwaWyswietlanaDluga

Z powyższego zapytania dowiadujemy się, że np. tabela przechowująca wartości zaawansowanych pól własnych asortymentu to: ModelDanychContainer.Asortymenty_PolaWlasneAsortyment_Adv2

A więc aby wyświetlić wartości wszystkich pól zaawansowanych dla asortymentu trzeba wykonać zapytanie:

select * from ModelDanychContainer.Asortymenty_PolaWlasneAsortyment_Adv2

gdzie
[Id] [int] NOT NULL - klucz główny będący jednocześnie kluczem obcym do kolumny [Id] z tabeli ModelDanychContainer.Asortymenty
[S0..99] [nvarchar](256) NULL - kolumny przechowujące wartości pól typu "Tekst"
[I0..99] [int] NULL - kolumny przechowujące wartości pól typu "Liczba całkowita"
[D0..99] [decimal](18, 6) NULL - kolumny przechowujące wartości pól typu "Liczba rzeczywista"
[B0..99] [bit] NULL - kolumny przechowujące wartości pól typu "Wartość logiczna"
[T0..99] [datetime2](7) NULL - kolumny przechowujące wartości pól typu "Data"
[G0..99] [uniqueidentifier] NULL - kolumny przechowujące wartości typu GUID

Widać, że nazwy kolumn przechowujące wartości pól zaawansowanych tworzone są według schematu {S|I|D|B|T|G}0..99 gdzie 0..99 jest unikatowym (w ramach typu pola) numerem. Po utworzeniu danego pola nazwa jego kolumny pozostaje już niezmienna.

Poniższe zapytanie wypisze wszystkie pola zaawansowane, odpowiadające im nazwy kolumn oraz informacje o powiązanych słownikach:

select
	extensionEntities.TableName as [Tabela z wartosciami pol zaawansowanych],
	extensionProperties.[Name] as [Nazwa pola],
	(case extensionProperties.TypeId 
		when 1 then 'I' 
		when 2 then 'G' 
		when 3 then 'S' 
		when 4 then 'D' 
		when 5 then 'T' 
		when 6 then 'B' 
	end) + cast(extensionProperties.PlaceholderIndex as nvarchar(2)) as [Nazwa kolumny pola],
	case extensionProperties.DataSourceKind
		when 0 then null
		when 1 then N'Slownik wlasny'
		when 2 then N'Slownik systemowy'
		when 3 then N'Slownik wlasny SQL'
	end as [Rodzaj slownika],
	case extensionProperties.DataSourceKind
		when 0 then null
		when 1 then (select sw.Nazwa from ModelDanychContainer.SlownikiWlasne sw where sw.Id = extensionProperties.DataSourceId)
		when 2 then case extensionProperties.DataSourceId when 1 then N'ModelDanychContainer.Waluty' end
		when 3 then (select sd.[Name] from ModelDanychContainer.SqlDictionaries sd where sd.Id = extensionProperties.DataSourceId)
	end as [Nazwa slownika],
	case extensionProperties.DataSourceKind
		when 0 then null
		when 1 then (select sw.Id from ModelDanychContainer.SlownikiWlasne sw where sw.Id = extensionProperties.DataSourceId)
		when 2 then null
		when 3 then (select sd.Id from ModelDanychContainer.SqlDictionaries sd where sd.Id = extensionProperties.DataSourceId)
	end as [Id slownika]
from DataExtensions.CurrentExtensionEntities extensionEntities inner join 
	DataExtensions.CurrentExtensionProperties extensionProperties on extensionEntities.Id = extensionProperties.EntityId
order by extensionEntities.TableName, extensionProperties.[Name]

W przypadku, gdy pole jest typu "Słownik własny", wtedy takie pole przechowywane jest w kolumnie z prefiksem I, która to kolumna zawiera klucz obcy do pozycji słownika własnego.
W przypadku, gdy pole jest typu "Słownik własny SQL", wtedy takie pole przechowywane jest w kolumnie z prefiksem I lub G w zależności od typu klucza obcego.
W przypadku, gdy pole jest typu "Słownik systemowy", wtedy takie pole przechowywane jest w kolumnie I lub G w zależności od typu klucza obcego.

Słowniki własne przechowywane są w tabeli ModelDanychContainer.SlownikiWlasne, a ich wartości w tabeli ModelDanychContainer.PozycjeSlownikowWlasnych
Słowniki własne SQL przechowywane są w tabeli ModelDanychContainer.SqlDictionaries a wartośći oczywiście pochodzą ze zdefiniowanego zapytania SQL

  • Dziękuję 2

Udostępnij ten post


Link to postu
Napisano (edytowany)

A czy po konwersji, przechowywane są gdzieś stare nazwy pól własnych (tez z bazy, nie z GUI)?

A może jest jakiś raport z konwersji, na którym można by się oprzeć?

Ułatwiło by to napisanie jakiegoś ich mapowania.

Edytowano przez Radomił Ząbik

Udostępnij ten post


Link to postu
Cytat

A czy po konwersji, przechowywane są gdzieś stare nazwy pól własnych (tez z bazy, nie z GUI)?

Proszę skorzystać z tabeli:

select * from ModelDanychContainer.KonwersjaZaawansowanychPolWlasnychDoWersji2Info

 

  • Dziękuję 1

Udostępnij ten post


Link to postu

×