Avatar billede teamdev Novice
22. august 2009 - 09:49 Der 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 .
Avatar billede w13 Novice
22. august 2009 - 13:55 #1
Skal "IS" ikke bare erstattes med "=" ?
Avatar billede arne_v Ekspert
22. august 2009 - 14:42 #2
=NULL returnerer altid false
Avatar billede arne_v Ekspert
22. august 2009 - 14:42 #3
Du kan lave en stored procedure som looper over alle kolonner.
Avatar billede arne_v Ekspert
22. august 2009 - 14:46 #4
Utestet:

CREATE PROCEDURE GETCOLUMNNAMES AS

DECLARE @tabname VARCHAR(32)
DECLARE @colname VARCHAR(32)

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

CLOSE c

DEALLOCATE c
GO
Avatar billede arne_v Ekspert
22. august 2009 - 14:46 #5
PS: Har du ingen streng felter ??
Avatar billede teamdev Novice
22. august 2009 - 15:23 #6
Arne_V

Jo det meste er VARCHAR enkelte er INT (id felter og fremmednøgler)
Desuden er der i en enkelt tabel 3 kolonner med DEC værdier (tidsregnskab)
Avatar billede arne_v Ekspert
22. august 2009 - 16:34 #7
VARCHAR felter kan jo ikke sættes til 0 men kun til ''.
Avatar billede teamdev Novice
22. august 2009 - 17:11 #8
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
Avatar billede Syska Mester
22. august 2009 - 17:21 #9
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.

// ouT
Avatar billede arne_v Ekspert
22. august 2009 - 17:26 #10
Som buzzzz siger 0 <> '0'.

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.
Avatar billede teamdev Novice
22. august 2009 - 17:44 #11
'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.
Avatar billede teamdev Novice
22. august 2009 - 17:45 #12
Kunne ellers være vittigt at tommer værdier konsekvent blev til 'My precious'
Avatar billede teamdev Novice
22. august 2009 - 17:49 #13
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.

Takker Arne - smid et svar
Avatar billede arne_v Ekspert
22. august 2009 - 18:06 #14
svar
Avatar billede arne_v Ekspert
22. august 2009 - 18:06 #15
Til det brug ville jeg fortsætte med NULL.
Avatar billede teamdev Novice
22. august 2009 - 19:12 #16
Arne_v

Hvad nu hvis jeg henter en NULL fra en INT til brug i en beregning (sammenlægning) går det så ikke galt ?
Avatar billede Syska Mester
22. august 2009 - 19:17 #17
ISNULL(felt, 0)

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester