27. september 2009 - 17:49Der er
3 kommentarer og 1 løsning
Gemme data med dynamiske kolonner i MSSQL
Hej.
Jeg har fået den interessante problemstilling at gemme, fx. en excel-fil, i en MSSQL 2005 database, og kunne lave udtræk fra et almindeligt Windows program.
Der er 2 problemstillinger:
1) Antallet af kolonner skal kunne variere alt efter hvor mange kolonner der er i datakilden.
2) Kolonnens type varierer også fx tekst, billeder, Bool osv. og bestemmes af datakilden.
Har lavet en mulig løsning på problemet, men vil høre om der evt. er et standard-mønster på hvordan det laves?
Min løsning er at have en tabel som indeholder 'Række_ID'(int) , 'Kolonne_Type'(nvarchar) og 'Værdi'(ntext/image).
Så for at få værdierne fra én bestemt række i datakilden finder man alle rækker i ovenstående table med det pågældende 'Række_ID' og typecaster "Værdi" til 'Kolonne_Type'.
Jeg ved at denne løsning har en del ulemper, deriblandt at man, så vidt jeg ved, mister muligheden for at søge efter en bestemt 'Værdi' fordi feltet er et ntext/image felt.
Ville have brugt NVarchar(max), havde bare huskede forkert mht. om NText er større end NVarchar(max).
Er det ikke noget med at der kun er 1 tegn til forskel for NVarchar(max) og NText ?
Nå men tak for god og hurtig reposonse igen igen, og vil klart prøve og kigge på XPath/XQuery. Hvis jeg ikke kan hutte ud af det må jeg fortsætte med row,col,typ,val.
NVARCHAR(MAX) kan indeholde det samme som NTEXT, men string funktionerne virker på NVARCHAR(MAX) men ikke på NTEXT.
Hvis det er en stor database hvor performance er vigtigt så vil din DBA muligvis have nogle meninger omkring NVARCHAR(MAX) versus NTEXT, fordi de fysisk gemmes anderledes.
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.