Vra

Ek het'n ongewone situasie om'n model in'n MS SQL Server databasis:die primêre sleutel van'n tafel is'n multi-segment "natuurlike" sleutel saamgestel uit 5 vreemde sleutels (van vaste groottes).

Ek wil graag in staat wees om te definieer'n gebruiker-gedefinieerde data tipe te implementeer om die data struktuur wat gebaseer is op'n CHAR(8) primitiewe in so'n manier dat die elemente is aanspreekbaar as individuele velde.

Byvoorbeeld (in'n slegte pseudokode):

UDT seggy
(
    seg1 char(2),
    seg2 char(1),
    seg3 char(1),
    seg4 char(2),
    seg5 char(2)
)

create table yotable
(
    pkfield seggy NOT NULL,
    etc varchar(14),   --whatever etc.
)
with pkfield as the primary key,
and also with seg1 as a foreign key to tableseg1,
and also with seg2 as a foreign key to tableseg2,
and so on

en dan in staat wees om dinge te doen soos hierdie:

insert into yotable (pkfield, etc) values ('abcdefgh','whatever')
select * from yotable where seg2 = 'c'
insert into yotable (seg1,seg2,seg3,seg4,seg5,etc)
    values ('ab','c','d','ef','gh', 'whatever')

So ver al wat ek gevind het, is hierdie CodeProject artikel wat nie ver genoeg gaan of skakels vir verdere inligting, en hierdie rudimentêre MSDN skakel.

Glo my google-fu is swak vanaand, enige skakels/wenke opreg waardeer!

Alternatiewe titel:hoe na te boots 'oortrek se velde in SQL SERVER?

MS SQL SERVER 2005 of later aanvaar/verkies.

Was dit nuttig?

Oplossing

Jy kan 'n CLR UDT dat die struktuur wat jy wil het definieer, maar (1) jy sal nie in staat wees om die vreemde sleutels hou (vreemde sleutels moet wees op die vlak kolom, nie 'n veld in 'n UDT in 'n kolom), en (2) dit is nie triviaal om 'n CLR UDT implementeer (ten minste in vergelyking met wat in jou pseudokode). Plus, uit jou beskrywing, dit klink soos hulle werklik is afsonderlike kolomme semanties, en wat jy is op soek na is net 'n kortpad vir gerief; IMO n UDT is waarskynlik nie die beste benadering in daardie scenario in elk geval.

Ek stel voor die behoud van die afsonderlike kolomme, maar skep óf 'n siening dat 'n kolom wat die velde saam Heg het, of 'n berekende kolom in die tabel wat dieselfde doen. Dit sal toelaat dat die soek met behulp van die gekombineerde óf afsonderlike notering. Jy kan dan gebruik 'n PLAAS VAN sneller om 'n insetsel / update ontbind op die gekombineerde kolom in die samestellende dele.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top