webForumDet fria alternativet

if-sats i stored procedure?

9 svar · 637 visningar · startad av Sanji

SanjiMedlem sedan juli 2009355 inlägg
#1

Hej! Jag har en stored procedure som ser ut så här:

ALTER PROCEDURE newinquiry
	@companyID uniqueidentifier,
	@responsibleuserID uniqueidentifier,
	@printdate datetime,
	@answerdate datetime
	AS
	BEGIN
	
	declare @notice int
	set @notice = 1
	

	declare @number int	
	SELECT @number = (SELECT MAX(number) FROM inquirydata WHERE companyID = @companyID) + 1
	if(@number = NULL)
	
	SET @number = 1
	
	declare @inquiryID uniqueidentifier
	SELECT @inquiryID = newid()
	
	

	insert into inquirydata(ID,companyID,number,printdate,answerdate)Values(@inquiryID,@companyID,@number,@printdate,@answerdate)

	END
	RETURN

jag försöker att kolla om det finns ett nummer i databasen, och om det finns det så ska det nya numret vara: nuvarande högsta +1. om det inte finns ett nummer så ska numret bli 1.

när jag kör den här så får jag felmeddelande om att tabellen number inte kan vara "NULL", detta då det inte finns några nummer i tabellen från början. If-satsen jag skrivit (ingen aning om hur den ser ut när man gör stored procedures) ska göra så att number får värdet 1 om det inte redan finns ett nummer, men det fungerar inte för mig just nu. någon som kan hjälpa?

Mvh Sanji

newseedMedlem sedan maj 2010117 inlägg
#2

Så som du skrivit frågan behövs väl inte IF-satsen? Du säger max + 1 vilket ju blir 1 om max är null?

SanjiMedlem sedan juli 2009355 inlägg
#3

ja det trodde jag också, men det blir inte så av någon anledning...

eller vänta lite, jag ska testa en sak

SanjiMedlem sedan juli 2009355 inlägg
#4

det var som jag trodde, var tvungen att dubbelkolla när du skrev att det borde bli 1 om det är null först, men @number får fortfarande värdet null om det inte redan finns ett nummer i databasen :(

newseedMedlem sedan maj 2010117 inlägg
#5

Ah, just ja. Det är nog fel databasmotor jag tänker på. Detta borde dock fungera:

IF @number IS NULL
	SET @number = 1
siloMedlem sedan nov. 200177 inlägg
#6

Borde funka så här också så behöver du inte använda en if-sats

SELECT @Number = ISNULL(MAX(number), 1)
FROM inquirydata 
WHERE (companyID = @companyID)
SanjiMedlem sedan juli 2009355 inlägg
#7

silo skrev:

Borde funka så här också så behöver du inte använda en if-sats

SELECT @Number = ISNULL(MAX(number), 1)
FROM inquirydata 
WHERE (companyID = @companyID)

Detta får ett nummer att läggas till som 1 då det inte redan finns ett nummer i databasen, men den fortsätter sedan att lägga till 1 igen, även då det finns ett nummer... vad kan det bero på?

Mvh Sanji

SanjiMedlem sedan juli 2009355 inlägg
#8

hehe, tänkte lite fel där ^^ jag måste ju fortfarande lägga till 1

SanjiMedlem sedan juli 2009355 inlägg
#9

så där, nu har jag en fungerande SP ^^ Tack till newseed och silo som hjälpte mig! ^^ jag bytte ut 1:an i sql-frågan mot en 0:a, och lägger till +1 varje gång, så det börjar på 1 och ökar hela tiden :)

siloMedlem sedan nov. 200177 inlägg
#10

Ja, sorry. Glömde ju lägga till 1 också, får byta ut 1 mot 0 i ISNULL-delen...

SELECT @Number = ISNULL(MAX(number), 0) + 1
FROM inquirydata 
WHERE (companyID = @companyID)
132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)