09. januar 2003 - 12:36 Der er 16 kommentarer

Indsæt NULL i mssql

Hej

Jeg sidder med en mssql db og skal via ASP med en række datofelter. Når jeg indsætter en valid dato, så er der ingen problemer. Men i det øjeblik der ikke indsættes noget giver mssql en fejl. Det skal være muligt ikke at indtaste noget, og idéen er så, at der indsættes NULL i db. Jeg opfatter det som om den ikke bare kan tage en tom streng; dato = "". Følgende fejl fremkommer

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Som om den opfatter en tom streng som en char, men hvad skal jeg give den for den opfatter det som NULL?

Er der nogen der kan hjælpe mig?
Avatar billede ramnir Nybegynder
09. januar 2003 - 12:45 #1
Kan du ikke bare lade være med at fylde noget i dato feltet. Så vidt jeg kan se prøver du at fylde en tom streng ind i et dato felt og den går ikke. Den accepterer kun data i dato format og ikke en streng.

Prøv derfor at lade være med at indsætte noget og se hvordan det går, du skal lige sikre dig at feltet godt må være tomt.

/ramnir
Avatar billede johnk Nybegynder
09. januar 2003 - 12:46 #2
Har du prøvet at skrive dato = NULL
09. januar 2003 - 12:59 #3
Jo jeg kan godt lade være, men problemet er bare at jeg gerne vil genbruge min sqlstreng hvor jeg har samtlige attributter med. Synes ikke det virker så cool med to strenge afhængigt af om datofelterne er udfyldt eller ej. Det bliver for meget slamkode, da der hører mange datofelter til hver.

Jeg er i tvivl om hvordan jeg skal lade være med at indsætte noget.
insert into <table>(datefelt) values (datostreng)
hvis jeg gerne vil benytte den samme sql streng hver gang, hvordan fylder jeg så ingenting i datostreng??
09. januar 2003 - 13:00 #4
For man kan jo ikke skrive datostreng = NULL eller er der noget man kan skrive for den opfatter det som NULL / ingenting??
Avatar billede johnk Nybegynder
09. januar 2003 - 13:03 #5
Det kan jeg godt se. Har du mulighed for at define default værdi på feltet som bruges hvis feltet ikke overføres. Umiddelbart kan jeg ikke se anden udvej end du strikker dit SQL sammen efter som du finder ud af om feltet er udfyldt eller ej
09. januar 2003 - 13:06 #6
Hvis jeg ikke udfylder feltet fungerer det som det skal. Det er her jeg løber ind i at jeg skal specificere min SQL afhængigt af det indtastede, hvilket ikke er så smart, da det ikke kun er udfyldt eller ikke udfyldt. Der er nemlig mange datofelter, dvs. et kan være udfyldt mens et andet ikke er udfyldt.
Avatar billede rasmusmoller Nybegynder
09. januar 2003 - 13:08 #7
Følgende er alstå gyldig SQL:

"insert into DateTable (Id, DateValue) values (1, NULL)", eller
"update DateTable set DateValue = NULL where Id = 1"
Avatar billede johnk Nybegynder
09. januar 2003 - 13:09 #8
Jeg plejer at løse det således:
sqlstreng = 'insert into ...'
if dato1 is null then
  sqlstreng = sqlstreng + 'dato = NULL'
else
Avatar billede johnk Nybegynder
09. januar 2003 - 13:10 #9
Det skete lige en fejl *G*
  sqlstreng = sqlstreng + dato = "dagsdato'
endif
Dette gentages så for samtlige felter
09. januar 2003 - 13:11 #10
rasmusmoller--> Jeg tester lige. Synes jeg har prøvet det tidligere uden held, måske kogte jeg rundt tidligere :-)
Avatar billede _darkstar_ Nybegynder
09. januar 2003 - 13:22 #11
Grunden til at der er problemer med at indsætte NULL er nok at flere databaseleverandører slet ikke tillader datofelter, som er sat til NULL.

INSERT into DateTable (id, datevalue) values (1,NULL)

er således syntaktisk korrekt SQL, men vil blive afvist hvis datevalue-feltet er af typen datetime.

Jeg er rimeligt overbevist om at det er tilfældet. Med andre ord: du kan ikke hælde NULL-værider i et datetime-felt.
09. januar 2003 - 13:22 #12
Hvis man "hardkoder" NULL ind i sql'en, ja så virker det som det skal. Nu mangler jeg så bare at kunne videregive NULL til en variable så jeg kan gøre det lidt mere dynamisk. Datostreng = NULL giver det samme som Datostreng = 0, og i mssql er det 1/1 1900 og det holder ikke. Hvordan overfører jeg NULL til en variable? Skal jeg bruge noget typecasting, og i givet fald hvad?
09. januar 2003 - 13:25 #13
darkstar --> nooo mener nu virkelig det? Hvad f.. skal jeg så gøre. Det fungerer som sagt hvis jeg hardkoder mig ud af det. Men nu er mit problem at jeg ikke kan sætte en variable til at indeholde NULL.
Avatar billede sukos Juniormester
09. januar 2003 - 15:29 #14
mysql_query("UPDATE tabel set dato = '0'") or die (mysql_error());
Avatar billede sukos Juniormester
09. januar 2003 - 15:30 #15
hov, det er jo i asp! :O)
Men princippet er vel det samme?
altså IKKE nogen NULL værdi, og alligevel! :O)
Avatar billede johnk Nybegynder
09. januar 2003 - 15:33 #16
Hvis jeg må blande mig så drejer det sig til konkret om mssql (se header) og der er der ingen problemer med at sætte et datofelt til NULL (hvis selvfølig er defineret til at må indeholde NULL)
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
Kurser inden for grundlæggende programmering

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