Avatar billede Slettet bruger
21. maj 2010 - 17:44 Der er 17 kommentarer og
1 løsning

Ny til MS SQL 2008

Hej

Jeg kommer fra en verden med MS Access - og har nu valgt at kaste mig ud i at lære at bruge en SQL 2008 Express Server. Jeg har installeret det på min webserver, og den kører fint. Jeg kan sagtens via asp lave connections til databasen og læse og skrive i den.

Der er bare lige et par ting som jeg skal have på det rene, som jeg ikke helt forstår.
- Hvorfor skal den database jeg vil connecte til ligge under SERVER\Databases\System Databases for at jeg connecte til den via asp? Jeg har bare lavet en "trusted" connection i asp, så det burde ikke have noget med brugeroplysninger at gøre. Hvis jeg derimod connecter til en database som ligger i System Databases så kører det fint!

- I Access er jeg vant til at man kan lave en id, som er autonummerering/primærnøgle i tabellen. Og når man så i asp opretter en ny række i databasen genererer databasen selv et unikt id i id-kollonnnen. Det kan jeg ikke få den til i SQL 2008 Express! Hvordan gøres dette. Hvis man sætter flueben ved "Allow Nulls", så kommer der ikke noget i dette felt, og hvis man fjerner fluebenet kommer asp-scriptet med en fejl, når man laver insert-sætningen... Hvordan løses denne?

\Dan
Avatar billede Syska Mester
21. maj 2010 - 17:54 #1
1. Da jeg aldrig har brugt Access, skal jeg ikke lige kunne sige hvad du mener ... men jeg kunne forestille mig at problemet er at din webserver som brugeren connector som er den bruger som skal have trusted adgang til din mssql ... kun en ide.

2. Det hedder en "Identity Column" i MSSQL.

mvh
Avatar billede hrc Mester
21. maj 2010 - 20:04 #2
Linket til MSDB 2008 kan være svært at finde: http://msdn.microsoft.com/en-us/library/bb510741.aspx
Avatar billede hrc Mester
21. maj 2010 - 20:10 #3
(msdn)
Avatar billede arne_v Ekspert
21. maj 2010 - 22:17 #4
Hvis man skal arbejde meget med SQLServer, så bør man nok downloade docs.

http://www.microsoft.com/downloads/details.aspx?FamilyID=c18bad82-0e5f-4e82-812b-5b23e5d52b9c&displaylang=en
Avatar billede Slettet bruger
21. maj 2010 - 23:02 #5
hmm... Jeg tror bare jeg vælger MySQL i stedet! Jeg synes det virker mere ligetil og mere overskueligt. Men tak for forsøgene allesammen, men der har ikke rigtigt været nogle som direkte har svaret på mine to spørgsmål..

\Dan
Avatar billede Syska Mester
21. maj 2010 - 23:12 #6
Øhhh, jo ...

Identity column modsvarer hvad du kader autonummerering.

Hvis din anden del af dit spørgsmål henviste sig til SSMS, så skal de databaser heller ikke være der ... som sagt, det er kun de system databases der er ... tempdb, master og vist et par andre.

Dine egne skal være et level længere oppe.

Om du vælger mysql er op til dig selv. Hvis du er på ASP så er det nok lige meget ... men skal du over på ASP.NET ... så vil jeg klart vælge MSSQL.

Og igen ... 50% af dit spørgsmål er besvaret ... nu er det nok over ... :-)
Avatar billede Slettet bruger
21. maj 2010 - 23:47 #7
Jamen altså...! Så må der være noget galt med min øjne eller også min skærm! For når jeg i management-programmet skal vælge datatype når jeg har oprettet en tabel, og er ved at lave kolonner, er der IKKE noget der hedder Identity. Man kan for eksempel lave en med int som datatype, og så nej til allow null, og ja til autoincreement... Så vil man få et tal, hvor den starter med 1, også videre for hver række der oprettes.
Men nu er det jo et replikerings-id jeg gerne vil have... Så derfor kan denne løsning ikke bruges...

\Dan
Avatar billede arne_v Ekspert
21. maj 2010 - 23:53 #8
Det er ikke en data type men en attribut til f.eks. et INTEGER felt.
Avatar billede arne_v Ekspert
21. maj 2010 - 23:54 #9
Der er formentligt en checkbox for identity i don GUI.
Avatar billede arne_v Ekspert
21. maj 2010 - 23:55 #10
Til noget distribueret halløjsa er GUID nok bedre.
Avatar billede Syska Mester
21. maj 2010 - 23:57 #11
Tror jeg så lidt 100% misforstår hvad du vil have ...

Er det uniqueidentifier(GUID) du leder efter?

Du nævner ikke noget om replikering ... har du flere databaser der skal synkroniseres, så er det nok overstående du skal bruge, men det synes jeg bare var svært at læse ud fra dit spørgsmål.

Men du nævner bare at du skal have et incremental id ...

mvh
Avatar billede Slettet bruger
22. maj 2010 - 01:25 #12
Tjae... Jeg nævner hverken om det skal være replikerings-id eller ej - som jeg ser det. Det beklager jeg! Men hvis man i Access vælger "Autonummerering" datatype og så "Replikerings-id" ved feltstørrelse - så bliver resultatet som eks. dette: {02F0A30D-5B30-4C00-B8FA-D5099C2D0FD0}

Atså en unik "kode" om man vil - og ikke bare et tal... Det var det jeg ville i SQL 2008 også...

Men det er ret ligemeget nu - for jeg sidder allerede og læser om MySQL i stedet...

\Dan
Avatar billede Syska Mester
22. maj 2010 - 01:35 #13
Ja, men så er det GUID. Access ting gør på sære måder.

Men du får 100% samme problem i MySQL ... der skal det laves på samme måde som i MSSQL :-) så lidt har du fået ud af vores "snak" her :-)

Der skal det også være int ... og så som attribut, "Auto incremental" hvis jeg husker rigtigt.

mvh
Avatar billede hrc Mester
22. maj 2010 - 15:32 #14
At lave en primær nøgle som identity(1,1) er banalt og hvis det vælter læsset for dig, så god fornøjelse i MySQL verdenen; tror ikke det er lettere der. Kan man ikke finde ud af Management Studio (som er et godt og brugervenligt værktøj), så kan du lave det direkte i TSQL

Her en tabel med identity:

create table dbo.mytable
(
    ref int not null identity(1,1),
    oprettet date not null constraint [df_mytable_oprettet] default (getdate()),
    navn nchar(50) null,
    constraint [pk_mytable] primary key(ref)
)

Du skriver du gerne vil have et replikeringsid -> GUID. Er det virkelig nødvendigt? Uanset hvordan man skruer et indeks sammen, så må en 32 byte lang primærnøgle (PK) være langsomt i forhold til en int med identity. Det fylder i alt fald mere.

Her er tabellen igen, bare med GUID som PK:

create table dbo.mytable
(
    ref uniqueidentifier not null constraint [df_mytable_ref] default (newid()),
    oprettet date not null constraint [df_mytable_oprettet] default (getdate()),
    navn nchar(50) null,
    constraint [pk_mytable] primary key(ref)
)

Indsæt nogle records:

insert into dbo.mytable (navn) values (N'Hello world')

En forespørgsel:

select * from mytable

Det kan godt være ingen har svaret fuldgyldigt på dit spørgsmål, men jeg synes ikke du bidraget med din del af forberedelse (selvstudie). Det var derfor jeg gav dig et link til TSQL på MSDN. Når man læser der, så lærer man også.
Avatar billede Syska Mester
22. maj 2010 - 15:54 #15
hrc#
Du kan bare ikke bruge identity hvis du har flere master tables ... hvor de skal sync sammen, derfor GUID er eneste mulighed.

Måske en Offline DB.

Men resten er jeg helt enig i.

mvh
Avatar billede arne_v Ekspert
22. maj 2010 - 16:05 #16
Jeg tvivler iøvrigt på at størrelsen betyder noget.

En UNIQUEIDENTIFIER fylder 16 bytes (de 32 bytes er i tekst version, men de gemmes binært ikke som tekst).

SÅ forskellen på INTEGER og UNIQUEIDENTIFIER er 12 bytes.

En million af slagsen giver en forskel på 12 MB.

12 MB er ingenting.

En milliard af slagsen giver en forskel på 12 GB.

Men jeg tvivler lidt på at spørger skal bruge milliarder.

Udover disk plads vil det også koste lidt ekstra at sammenligne (memcmp fremfor == i C syntax), men igen bør det ikke blive til noget mærkbart.
Avatar billede hrc Mester
22. maj 2010 - 16:05 #17
Buzzz: Det er godtnok heller ikke det jeg gør ret meget i, det medgiver jeg.

Jeg overvejede det i en snapshot replikering til et decentralt modul (hvor kunderne tager en lokal database med rundt på den bærbare). Ville ikke bruge GUID da de decentrale maskiner kører 2008 express (som nu i R2 express er kommet op på 10Gb, mod tidligere 4Gb). I masterdatabasen skulle jeg endvidere banke en GUID ned i hver eneste record i de tabeller som der skulle flyttes data mellem - og dem er der mange af. Jeg skippede GUID'et og lavede det med et decentralt map_ref-felt som modsvarer ref'en i master-databasen.

Replikeringen virker ret godt, men jeg synes det er en pest at sætte op - det synes kunden også (men det er altså også et stort netværk med mange domæner).
Avatar billede hrc Mester
22. maj 2010 - 16:06 #18
Buzzz: Det er godtnok heller ikke det jeg gør ret meget i, det medgiver jeg.

Jeg overvejede det i en snapshot replikering til et decentralt modul (hvor kunderne tager en lokal database med rundt på den bærbare). Ville ikke bruge GUID da de decentrale maskiner kører 2008 express (som nu i R2 express er kommet op på 10Gb, mod tidligere 4Gb). I masterdatabasen skulle jeg endvidere banke en GUID ned i hver eneste record i de tabeller som der skulle flyttes data mellem - og dem er der mange af. Jeg skippede GUID'et og lavede det med et decentralt map_ref-felt som modsvarer ref'en i master-databasen.

Replikeringen virker ret godt, men jeg synes det er en pest at sætte op - det synes kunden også.
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