- SQL support -

SQL er det sprog database kommunikerer i. Her følger information om grundlæggende SQL.

SQL kald kan køres via Enterprise Manager, Query Analyzer eller via ASP kode.

Søgefunktioner

De fleste er vant til at bruge wildcards, hvor ? betyder en tilfældig karakter og * betyder et antal tilfældige karakterer. I SQL bruger man _ til en tilfældig karakter og % til et antal tilfældige karakterer.

Søgefunktion Beskrivelse
ORDER BY felt [ASC|DESC] Sorterer posterne efter felt og returnerer dem med det mindste først. Brug ASCending og DESCending for at bestemme søgeorden.
LIKE 'tekst' Hvad du søger efter. felt LIKE 'P_t%' finder Peter men ikke Peeter. Du kan også bruge visse regular expressions, for eksempel [0-3].
felt IN felt IN ('abc', 'def') returnerer sand hvis feltet indeholder abc eller def. Husk at du ikke kan bruge wildcards i en IN sætning.
felt IS NULL Er posten lig med NULL (ikke eksisterende)
felt BETWEEN lilletal AND storttal Er posten imellem to tal
[where], [felt med mellemrum] Hvis dit felt skal hedde noget SQL allerede bruger (where, and, or) eller dit felt skal bruge 'ulovlige' karakterer skal du sætte firkantede parenteser omkring.

Regnemetoder

SQL har også alle de regnefunktioner man kan få brug og man kan for eksempel også få antallet af poster ved at calde COUNT(*) i stedet for at hente selve posterne.

Regnefunktion Beskrivelse
SUM Summen af posterne
COUNT Antal poster
EXISTS Sand hvis der er minimum en post der passer på dit SQL kald.
TOP n [PERCENT] 'SELECT TOP 10 *' viser de 10 første forekomster. Kan kombineres med ORDER BY for at se de sidste.
MIN
MAX
AVG
ALL
ANY
SOME

Faq

AspToday om XML i SQL 2000

Kan jeg uploade filer (billeder) direkte ind i min SQL database?

Det er muligt at lægge binære filer ind i en database. Det er dog langt smartere (hurtigere) at indlægge et link til en fysisk fil i databasen, og så beholde selve filen på webserveren.

Skal jeg bruge NULL eller NOT NULL?

Hvis du sætter NULL (altså NULLS er tilladt) så risikerer du at du ikke kan opdatere dine data via Recordsets fordi den ikke kan danne værdien. Hvis du sætter NOT NULL så har du det problem at du ikke kan checke på om feltet indeholder NULL men skal checke på tom streng ved strengværdier, på 00-00-0000 00:00 for datoer etc. Du kan altså ikke på samme lette måde se om der er skrevet data i feltet eller ej. Hvis du sætter NOT NULL så kan du ikke bruge COUNT til at tælle antal poster da COUNT netop er "samlede poster minus dem der er NULL i dette felt".

Hvordan bruger jeg et ID felt?

Sæt altid dit ID felt (din nøgle) til UNIQUE og ret aldrig i feltet. Så risikerer du ikke at have to felter der har samme ID og samme poster, hvorved SQL serveren ikke kan skelne mellem de to poster.

Serveren kan ikke nå at forbinde?

Forhøj timeout værdien til SQL serveren: "Connect Timeout=15;".

Hvad er ANSI SQL?

Ansi SQL er standard SQL, som de fleste SQL databaser bygger videre på. Du kan se hele standarden i sql1992.txt, bemærk dog at den fylder 1.7 MegaByte.

Forskelle i data/felttyper for forskellige databaser

En liste over forskellige SQL reserved words, SQL and Jet datatypes, forskelle mellem ANSI SQL og Jet SQL "Equivalent ANSI SQL Data types".

Felttyper
Beskrivelse MS SQL MySQL Access
Felttyper
Integer int ? ?
Large integer bigint ? integer
Karakterer varchar varchar text
Tekstfelt text ? memo
Dato datetime ? date
Autonummereret bigint IDENTITY ? counter / autoincrement
Ja/nej bit ? bit
Andet
Quote karakterer [navn] `navn` [navn]

Boolean (bit) forskelle

Virker i Access men ikke i MS SQL:

SELECT * FROM tabel WHERE felt = TRUE 
SELECT * FROM tabel WHERE felt = FALSE

Virker i MS SQL men ikke i Access (hvor sandt = -1):

SELECT * FROM tabel WHERE felt = 1
SELECT * FROM tabel WHERE felt = 0

For at dit select/update kald virker både i Access/SQL og i alle typer connection-strings, bør du altså bruge:

SELECT * FROM tabel WHERE felt <> 0 
SELECT * FROM tabel WHERE felt = 0 
UPDATE tabel SET felt = 1                 -- Ved update vil Access konvertere det til -1 
UPDATE tabel SET felt = 0

Wildcards

Hvis du har brug for at bruge udvidede wildcards i søgninger, skal du bruge firkantede parenteser rundt om teksten, du kan for eksempel finde alle resultater der indeholder karaktererne a-z ved at søge på LIKE [a-z].

Symbol Resultat
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d and abc_de
LIKE 'abc[def]' abcd, abce, and abcf

Eksempler

Sørger for at SQL serveren ikke checker din nye constraint på eksisterende data

WITH NOCHECK

Slår constraints fra (CHECK slår til)

	ALTER TABLE tabel NOCHECK
	

Hvis dit login har adgang til flere databaser kan du sætte hvilken der skal arbejdes på med følgende kald forrest:

	USE database
	

Husk at der intet er til hinder for at lave en kæmpemæssig SQL sætning, f.eks.:

	CREATE TABLE ...
	INSERT INTO ... VALUES ....
	INSERT INTO ... VALUES ....
	

Sletter en tabel

	DROP TABLE tabel
	

Opret en ny tabel

CREATE TABLE tabel
(
  ID    int             NOT NULL   IDENTITY(1,1) PRIMARY KEY,
  Name  varchar(25)     NOT NULL   DEFAULT '',
  Notes varchar(25)     NULL,
  Date  datetime        NOT NULL   DEFAULT GETDATE()
)


'Assuming cn is an ADODB connection object and is open and the account has rights to alter the table (SQL Server)
 
<%
'connection info here....
 
cn.execute "ALTER TABLE tblClient ADD NumKids INT NULL"
 
%>

Ret en tabel og sæt et felt til Primary key (nøgle)

	ALTER TABLE tabel
		ADD CONSTRAINT CN_felt
		PRIMARY KEY (felt)
	

Opret et nyt felt i en tabel

	ALTER TABLE tabel
		ADD NytFelt datetime
	

Opret et nyt felt og sæt en standardværdi

	ALTER TABLE tabel
		ADD NytFelt2 text NOT NULL
			DEFAULT 'Hej'
	

Sæt en standard værdi på et eksisterende felt

	ALTER TABLE tabel
		ADD CONSTRAINT CN_NameDefault
			DEFAULT 'standard værdi' FOR felt
	

Tving feltet Status i SubDomain til kun at indeholde de data der findes i Tabel(Felt)

	ALTER TABLE tabel
		ADD CONSTRAINT FK_tabel2
			FOREIGN KEY (felt)
				REFERENCES tabel2(felt)
	

Poster

Indsætter en ny post med data.

	INSERT INTO tabel
		(ID, Name, Notes)
	VALUES
		(1, 'Per', 'Vores første kunde')
	

Indsætter flere poster samtidigt.

	INSERT INTO tabel
		(ID, Name, Notes)
	SELECT 1, 'Per', 'Vores første kunde' UNION ALL
	SELECT 2, 'Karsten', 'Vores anden kunde' UNION ALL
	SELECT 3, 'Søren', 'Vores tredje kunde'
	

Kopierer data fra en anden tabel hvor WHERE sætningen matcher.

	INSERT INTO tabel
		(Name, Notes)
	SELECT Name, Notes
		FROM tabel2
			WHERE (Name LIKE 'Anders')
	

Sletter poster fra tabellen hvor WHERE matcher.

	DELETE FROM tabel
	WHERE (Name LIKE 'Per')
	

Opdaterer de poster hvor din WHERE sætning matcher.

	UPDATE tabel
		SET Name = 'Søren', Notes = 'Hov, han hedder jo Søren'
			WHERE Name LIKE 'Per'
	

Finder alle poster hvor felt starter med a,b,c,d eller e.

	SELECT *
		FROM tabel
			WHERE felt LIKE '[a-e]%'
	

Finder alle poster i felt hvor ordet bil indgår for sig selv, altså ikke racerbil eller lastbil.

	SELECT *
		FROM tabel
			WHERE felt LIKE '%[ ,.;:]bil[ ,.;:]%'
	

Returnerer antal poster hvor felt ikke er sat og derfor er NULL (ikke eksisterende).

	SELECT COUNT(*)
		FROM OrderList
			WHERE Domain IS NULL
	

Søg i datetime kolonner.

	WHERE (FELT >= '2001-08-16') AND (FELT < '20010817')
	WHERE (MissingStart LIKE '%aug_16_2001%')
	

SQL forstår dataene i formatet YYYYMMDD hh:mm:ss.fff, du kan dog godt udelade nogen data og separatortegn er valgfrie. I ovenstående eksempel får vi altså alle poster hvor felt er et tidspunkt, den 16. august 2001. I den anden linje lader vi SQL fortolke datoen og så er sorteringen anderledes og afhængig af det valgte sprog. Hvis vi i den anden linje vælger datoen den 1. august vil det dog gå galt, uanset om vi skriver 1 eller 01.

Collations og sortering

Vores danske servere kører som standard med collation "Danish_Norwegian_CI_AS" hvilket påvirker sorteringen af dataene i dine kolonner. Du vil muligvis opleve at du får brug for den mere internationale "SQL_Latin1_General_CP1_CI_AS" eller andre collations (sorteringer) og du kan selv via SQL kommandoer ændre dette.

For at ændre hele databasens collation eksekverer du:
ALTER DATABASE DatabaseNavn COLLATE SQL_Latin1_General_CP1_CI_AS

Dette påvirker dog kun fremtidige tabeller og ikke eksisterende du allerede har oprettet. For at rette eventuelle eksisterende tabeller skal du for alle kolonner køre:
ALTER TABLE TabelNavn ALTER COLUMN NavnPåFørsteKolonne
varchar(10)COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

Bemærk at ALTER DATABASE kræver at der ikke er nogen andre brugere der har databasen åben.

Referencer

crossfit

"Team CrossFit Copenhagen takker for støtten fra Azero i vores kamp for at nå til CrossFit Games (VM) i Californien i Juli."

Nikolaj Rønnow

2015-01-19T11:02:53+00:00

Nikolaj Rønnow

crossfit
"Team CrossFit Copenhagen takker for støtten fra Azero i vores kamp for at nå til CrossFit Games (VM) i Californien i Juli."
eyeforimage

Azero has been Eye for Image's ISP from the very beginning. It's reassuring to know that they not only have a great array of products, but that we can always get relevant and timely information from their professional support team, by just picking up the phone and talking to someone.

Matt Coyle, Technical Copywriter / Eye for Image ApS

2015-01-20T03:47:24+00:00

Matt Coyle, Technical Copywriter / Eye for Image ApS

eyeforimage
Azero has been Eye for Image's ISP from the very beginning. It's reassuring to know that they not only have a great array of products, but that we can always get relevant and timely information from their professional support team, by just picking up the phone and talking to someone.

Kontakt Azero

Firmainformationer

Azero ApS
Stægers Alle 9A
2000 Frederiksberg
CVR: 36 96 60 41
VAT: DK28101759
KOB: 1191353

Telefon

Telefon: 38 19 50 17
 

Normal telefontid

Man-tor: 9:30-12:00 og 13:00-15:30
Fredag: 9:30-12:00 og 13:00-14:00