/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL: hvilken datatype ift. Access' datet~
Fra : Jesper


Dato : 06-09-05 23:59

Jeg er helt ny med mssql. Jeg forsøger at konvertere en access db til mssql,
men
får importfejl ved mit felt "dato" og "klokken". De er begge "datetime" i
access -
hvilken datatype skal jeg bruge i mssql?

Tak for hjælpen.

Jesper



 
 
Jens Gyldenkærne Cla~ (08-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 08-09-05 20:26

Jesper skrev:

> Jeg er helt ny med mssql. Jeg forsøger at konvertere en access
> db til mssql, men
> får importfejl ved mit felt "dato" og "klokken". De er begge
> "datetime" i access -

Hvordan foretager du importen? Det er muligvis bare et spørgsmål om
at definere datoformatet under importen.

Men hvis det ikke vil fungere, kan du importere feltet som tekst,
og så konvertere via en forespørgsel i MSSQL.

> hvilken datatype skal jeg bruge i mssql?

Du skal bruge Datetime i MSSQL - præcis som i Access (evt.
smalldatetime, hvis du skal lagre en dato uden tid).

Hvis du får datoerne ind som tekst, og skal have konverteret dem
til en mssql-dato, kan du kigge på funktionen CONVERT i BOL (BOL =
Books Online ~ onlinehjælpen til MSSQL).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper (09-09-2005)
Kommentar
Fra : Jesper


Dato : 09-09-05 10:38

>> Jeg er helt ny med mssql. Jeg forsøger at konvertere en access
>> db til mssql, men
>> får importfejl ved mit felt "dato" og "klokken". De er begge
>> "datetime" i access -
>
> Hvordan foretager du importen? Det er muligvis bare et spørgsmål om
> at definere datoformatet under importen.
>
> Men hvis det ikke vil fungere, kan du importere feltet som tekst,
> og så konvertere via en forespørgsel i MSSQL.
>
>> hvilken datatype skal jeg bruge i mssql?
>
> Du skal bruge Datetime i MSSQL - præcis som i Access (evt.
> smalldatetime, hvis du skal lagre en dato uden tid).
>
> Hvis du får datoerne ind som tekst, og skal have konverteret dem
> til en mssql-dato, kan du kigge på funktionen CONVERT i BOL (BOL =
> Books Online ~ onlinehjælpen til MSSQL).


Jeg har lavet datatypen om til "nvarchar" og har fået importeret dataene fra
dato-kolonnen og klokken-kolonnen. Så nu har jeg det hele importeret, blot
er disse to kolonner strings i stedet for smalldatetime.

Jeg har kigget på CONVERT og CAST kommandoerne i BOL og det ser ud til jeg
skal bruge noget i stil med
USE mintabel SELECT CONVERT(smalldatetime, title) FROM mintabel
Er det rigtigt? Jeg må indrømme, jeg ved ikke engang, hvor jeg skal indtaste
dette. Skal jeg ind under "Views" og oprette et view og så køre SQL'en?
Der får jeg at vide at "the query analyzer does not support the USE
construct".
Jeg er desværre helt ny med MSSQL, håber jeg kan komme videre.
Tak for hjælpen.

Jesper



Jens Gyldenkærne Cla~ (09-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-09-05 11:40

Jesper skrev:

> Så nu har jeg det hele importeret, blot er disse to kolonner
> strings i stedet for smalldatetime.

Fint. Du skal nu afgøre om du fortsat vil have to felter (et til
dato og et til tid) eller du vil samle oplysningen i ét felt (du
kan til enhver tid trække enkeltoplysningerne ud af det samlede
felt).


> Jeg har kigget på CONVERT og CAST kommandoerne i BOL og det
> ser ud til jeg skal bruge noget i stil med
> USE mintabel SELECT CONVERT(smalldatetime, title) FROM
> mintabel

Det er lidt derhenad - men ikke helt nok.

Du skal bruge CONVERT, men CONVERT skal have tre argumenter når der
er tale om datoer. Første argument er den datatype du vil
konvertere til (datetime eller smalldatetime), andet argument er
det felt du vil konvertere (altså det felt der indeholder datoen
som tekst), og tredje argument fortæller hvordan datoen skal læses.

I BOL er der en lang oversigt over formatkoderne til datoer - jeg
plejer at bruge 5 og 105, der svarer til hhv. dd-mm-yy og dd-mm-
yyyy. Du skal bruge et format der passer til den tekstudgave du har
liggende i feltet.

I første omgang er det en god ide bare at lave en select - fx som
her:

   SELECT tekstdato, CONVERT(datetime, tekstdato, 105) as datDato
   FROM dintabel

Det vil give dig tekstværdien og den konverterede værdi ved siden
af hinanden. datDato vil formentlig være i formatet yyyy-mm-dd
hh:mm:ss.mmm - altså svarende til format 21 i convert-oversigten.
Hvis det er forvirrende, kan man evt. konvertere tilbage (med et
dobbelt kald til CONVERT).

Hvis du får de rigtige datoer ud med CONVERT, kan du gemme dem i et
datofelt. Du skal oprette et nyt felt i databasen, som du så kan
opdatere ved hjælp af det gamle:

   UPDATE dintabel
   SET nydato = CONVERT(datetime, tekstdato, 105)

Hvis opdateringen går godt, kan du så slette tekstdatofeltet.


> Der får jeg at vide at "the query analyzer does not support the
> USE construct".

Det lyder umiddelbart mærkeligt - men det betyder ikke det store.
USE-kommandoen er kun nødvendig hvis man arbejder med flere
databaser i samme script (argumentet til USE er i øvrigt navnet på
en database - ikke en tabel).

Hvis du har flere databaser til rådighed, kan du tjekke øverst i
query analyser om du står i den rigtige (der er en dropdown-liste
med tilgængelige databaser).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper (09-09-2005)
Kommentar
Fra : Jesper


Dato : 09-09-05 21:01

>> Så nu har jeg det hele importeret, blot er disse to kolonner
>> strings i stedet for smalldatetime.
>
> Fint. Du skal nu afgøre om du fortsat vil have to felter (et til
> dato og et til tid) eller du vil samle oplysningen i ét felt (du
> kan til enhver tid trække enkeltoplysningerne ud af det samlede
> felt).
>
>
>> Jeg har kigget på CONVERT og CAST kommandoerne i BOL og det
>> ser ud til jeg skal bruge noget i stil med
>> USE mintabel SELECT CONVERT(smalldatetime, title) FROM
>> mintabel
>
> Det er lidt derhenad - men ikke helt nok.
>
> Du skal bruge CONVERT, men CONVERT skal have tre argumenter når der
> er tale om datoer. Første argument er den datatype du vil
> konvertere til (datetime eller smalldatetime), andet argument er
> det felt du vil konvertere (altså det felt der indeholder datoen
> som tekst), og tredje argument fortæller hvordan datoen skal læses.
>
> I BOL er der en lang oversigt over formatkoderne til datoer - jeg
> plejer at bruge 5 og 105, der svarer til hhv. dd-mm-yy og dd-mm-
> yyyy. Du skal bruge et format der passer til den tekstudgave du har
> liggende i feltet.
>
> I første omgang er det en god ide bare at lave en select - fx som
> her:
>
> SELECT tekstdato, CONVERT(datetime, tekstdato, 105) as datDato
> FROM dintabel
>
> Det vil give dig tekstværdien og den konverterede værdi ved siden
> af hinanden. datDato vil formentlig være i formatet yyyy-mm-dd
> hh:mm:ss.mmm - altså svarende til format 21 i convert-oversigten.
> Hvis det er forvirrende, kan man evt. konvertere tilbage (med et
> dobbelt kald til CONVERT).
>
> Hvis du får de rigtige datoer ud med CONVERT, kan du gemme dem i et
> datofelt. Du skal oprette et nyt felt i databasen, som du så kan
> opdatere ved hjælp af det gamle:
>
> UPDATE dintabel
> SET nydato = CONVERT(datetime, tekstdato, 105)
>
> Hvis opdateringen går godt, kan du så slette tekstdatofeltet.
>
>
>> Der får jeg at vide at "the query analyzer does not support the
>> USE construct".
>
> Det lyder umiddelbart mærkeligt - men det betyder ikke det store.
> USE-kommandoen er kun nødvendig hvis man arbejder med flere
> databaser i samme script (argumentet til USE er i øvrigt navnet på
> en database - ikke en tabel).

Mange tak for hjælpen. Jeg er godt hjemme i Access, men MSSQL er en nogen
anden verden.
Jeg bliver nødt til at spørge - en UPDATE kommando, som den du nævner - skal
jeg lave den i en stored procedure?
Jeg har lavet en stored proc med ovennævnte UPDATE-sætning, men hvordan
"eksekverer" jeg den?




Jens Gyldenkærne Cla~ (09-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-09-05 21:25

Jesper skrev:

> Mange tak for hjælpen. Jeg er godt hjemme i Access, men MSSQL
> er en nogen anden verden.
> Jeg bliver nødt til at spørge - en UPDATE kommando, som den du
> nævner - skal jeg lave den i en stored procedure?

Nej - det er ikke nødvendigt. Men fortæl lige hvordan du arbejder i
MSSQL. Det lyder lidt som om du sidder med en Access project-fil
(*.adp) - det giver nogle restriktioner på hvad du kan lave.

Hvis du har adgang til det, så prøv at bruge Query Analyzer (QA) -
den kan startes med kommandoen ISQLW.

> Jeg har lavet en stored proc med ovennævnte UPDATE-sætning,
> men hvordan "eksekverer" jeg den?

Allerførst - har du tjekket at det du vil opdatere til er korrekt
(ved at bruge en select-sætning)?

Du kan køre en procedure ved at skrive EXEC navn_på_procedure - men
der hvor du kan skrive det, kan du lige så godt bare skrive din
update-sætning.

Hvis du er i et Access-project kan du højreklikke på sp'en og vælge
kør (du kan muligvis også dobbeltklikke - men jeg kan ikke huske om
den vælger rediger ved dobbeltklik).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper (09-09-2005)
Kommentar
Fra : Jesper


Dato : 09-09-05 21:57

>> Mange tak for hjælpen. Jeg er godt hjemme i Access, men MSSQL
>> er en nogen anden verden.
>> Jeg bliver nødt til at spørge - en UPDATE kommando, som den du
>> nævner - skal jeg lave den i en stored procedure?
>
> Nej - det er ikke nødvendigt. Men fortæl lige hvordan du arbejder i
> MSSQL. Det lyder lidt som om du sidder med en Access project-fil
> (*.adp) - det giver nogle restriktioner på hvad du kan lave.
>
> Hvis du har adgang til det, så prøv at bruge Query Analyzer (QA) -
> den kan startes med kommandoen ISQLW.
>
>> Jeg har lavet en stored proc med ovennævnte UPDATE-sætning,
>> men hvordan "eksekverer" jeg den?
>
> Allerførst - har du tjekket at det du vil opdatere til er korrekt
> (ved at bruge en select-sætning)?
>
> Du kan køre en procedure ved at skrive EXEC navn_på_procedure - men
> der hvor du kan skrive det, kan du lige så godt bare skrive din
> update-sætning.
>
> Hvis du er i et Access-project kan du højreklikke på sp'en og vælge
> kør (du kan muligvis også dobbeltklikke - men jeg kan ikke huske om
> den vælger rediger ved dobbeltklik).

Ok nu dæmrer det for mig. Jeg har rodet rundt i selve EM, hvor jeg kan
oprette stored procs, men har slet ikke været inde i selve Query Analyzeren
(ret utroligt, jeg ved det). Nu tror jeg jeg kan finde ud af det herfra.
Tusind tak for hjælpen!

Jesper F



Jens Gyldenkærne Cla~ (09-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-09-05 22:34

Jesper skrev:

> Nu tror jeg jeg kan finde ud af det herfra.

Godt - held og lykke.

> Tusind tak for hjælpen!

Velbekomme. Hvis du vil gøre lidt til gengæld, må du gerne læse min
signatur.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper (10-09-2005)
Kommentar
Fra : Jesper


Dato : 10-09-05 10:36

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev
> Velbekomme. Hvis du vil gøre lidt til gengæld, må du gerne læse min
> signatur.

Naturligvis. Tak for hjælpen.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste