22. august 2009 - 09:49Der er
16 kommentarer og 1 løsning
opdatere alle felter i tabel
Hejsa,
Ved import af en masse værdier til en ny database er der en hulens masse NULL værdier.
Dem vil jeg godt ha ændret til noget andet, f.eks 0
Jeg kan sagtens gøre det for hvert felt med UPDATE tbl_Data SET Felt = 0 WHERE Felt IS NULL
Og sådan kunne jeg jo så gøre for alle kolonner i alle tabeller en ad gangen.
Men så tænkte jeg at der nok var en eller anden klog en her på eksperten som lige kunne fortælle mig hvordan jeg gør det enten pr tabel eller ekstra lækkert på hele databasen
Altså: Alle felter i alle kolonnner i en tabel hvor værdien er NULL skal ændres til 0 .
DECLARE c CURSOR FOR SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE 'noget%'
OPEN c
FETCH NEXT FROM c INTO @tabname,@colname
WHILE @@FETCH_STATUS = 0 BEGIN PRINT @tabname + " " + @colname -- når du tror det virker så aktivererer du dette: -- EXEC('UPDATE ' + @tabname + ' SET ' + @colname + '=0 WHERE ' + @colname + ' IS NULL') FETCH NEXT FROM c INTO @tabname,@colname END
Varchar kan vel egentlig sættes til at indeholde hvilket tegn det skal være ..... for så vidt er jeg ligelad med hvad det skal indeholde, bare ikke NULL så kan jeg i min applikation spørge efter om værdien er 0 og hvis den er det skal der ske en ting men er værdien forskellig fra 0 skal der ske noget andet.
Jeg har iøvrigt sat alle varchar til 0 uden problemer
0 er et tal ... '0' er tegnet ... tror det er det arve_v mener.
Men hvis du vil sprøge efter noget ... er det så ikke bare at sige
WHERE felt IS NULL ? eller WHERE felt IS NOT NULL ?
Synes det virker rimelig mærkeligt hvis du skal bruge feltet til noget ... hvad nu senere hvis du reelt vil skrive '' ( altså ingenting ) så løber du jo ind i problemer.
Men jeg ved selvf ikke hvordan det hele er opbygget.
Men lyder lidt som om problemet skal løses et andet sted end at lave alle NULL felter om ... kun et gæt selvfølgelig.
Du kan naturligvis vælge en hvilken som helst værdi. Men andre der skal arbejde med den database skal nok undre sig hvis du fylder de "tomme" værdier med citater fra ringenes herre.
'0' som et tegn :-) det er det jeg mener med at jeg for så vidt er ligeglad med hvad der skal stå istedet for NULL
Lille forklaring:
Jeg henter alle data fra databasen og præsenterer dem på en webside via ASP hvis et felt er <> '0' skal indholdet vises, ellers ikke.
Det vil være muligt for brugeren at editere indholdet via en formular på en webside. Igen indsættes værdier kun i form felterne hvis værdien er <> '0'
Når formularen submittes og data returneres ændrer jeg blot de tomme felter til '0' på den måde har jeg fuld kontrol over hvad der sker med tomme værdier.
I ca. 90 % af tilfældene vil jeg dog have værdier i alle felter. Og over tid nærmer vi os de 100%
Hele projektet er en database over vores installationer, altså oplysninger om hardware, ip adresser etc.
Nå men nu var det jo ikke ment som en diskussion pro et contra NULL værdier. Jeg ville blot have en enkel måde at lave NULL om til '0' og det har jeg fået.
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.