Så har jag nu då försökt mig på att göra en stored procedure. Och det funkar fint. Det är väl bara det att jag funderar på ifall man inte skulle kunna lösa det på ett mycket smidigare sätt.
Har lite problem att förstå mig på syntaxen. När man, tex, använder IF (som ju går att göra) så deklarerar man inget slut. Utan If satsen slutar typ när man har gjort ett action command eller liknande. Beror det på SQL:s uppbyggnad eller är det bara jag som gör fel.
Vad Begin ska vara bra för vet jag inte heller, eftersom det verkar funka utan det.
Nog pladdrat. Koden är till ett forum och ser ut såhär:
CREATE PROCEDURE AddNewPost
@UID varChar(15), --User ID
@PWD varChar(10), --Password
@Topic varChar(30), --Message Topic
@Body varChar(2000), --Message Body Text, 2000 chars
@MsgRef int, --Message Reference
@GroupRef int, --Group Reference
@MsgLevel int --Message Level
AS
BEGIN
DECLARE @PostAdded Int --Return value
DECLARE @PostDate dateTime
DECLARE @UserID int
---See if username and password are corre with the same name exists
IF EXISTS(SELECT ID
FROM Users
WHERE UID = @UID --Check User ID
AND PWD = @PWD) --Check Password
SELECT @PostAdded = 1, -- If user exists return true
@PostDate = GetDate(), --Set Current Date
@UserID = (SELECT ID
FROM Users
WHERE UID = @UID
AND PWD = @PWD)
IF @PostAdded = 1
INSERT INTO Posts (Msgref,GroupRef,PostDate,Topic,UserID,Body,MsgLevel)
VALUES (@MsgRef,@GroupRef,@PostDate,@Topic,@UserID,@Body,@MsgLevel)
ELSE
SELECT @PostAdded = 0 -- Else return false
IF @PostAdded = 1
UPDATE Users
SET NoOfPosts = NoOfPosts + 1
WHERE ID = @UserID
RETURN @PostAdded --Return true if user exists
END
Vad den gör är att den först kollar lösenord och password. Sedan så tar den och ger datumet till @PostDate och sedan UserID:t till @UserID (vilket av någon konstig anledning gjorde så att jag var tvungen att göra om hela password checken! Fick det inte att funka på något annat sätt)
Sedan så tar det och sätter in alla posts. Och då var jag tvungen att göra en ny if sats (som jag förklarade innan) och sedan så uppdaterar den hur många posts användaren har gjort (där jag också fick göra en ny if sasts!).
Kan någon hjälpa mig att få ordning på begreppen? Detta funkar som sagt. Men det är nog inte riktigt så man ska göra det?
Sedan undrar jag ifall SQL har någon motsvarighet till javasript's Eval()?
Varför jag vill ha detta är pga att jag ska snart få tillgång till en SQL sever.
Men om jag vill göra en Table eller en ny procedur så vill jag ju inte behöva störa dem med att de ska in i databasen och uppdatera. Så jag tänkte göra en procedur där man kunde slänga in vilka SQL statments som helst genom asp.
Jag förutsätter att de har SQL Servern på intranät, så jag inte kan få direkt access till den via nätet. Men det finns kanske något annat sätt?
Det var det. Jätte glad ifall någon har svar på mina frågor! :)
------------------
/Magnus aka Zaphod
www.designmodule.com.bi