Torna al Thread
USE tempdb;
GO
CREATE TABLE dbo.Iscrizioni
(
IDIscrizione int IDENTITY(1,1) NOT NULL
, IDUtente int NOT NULL
, DataIscrizione smalldatetime NOT NULL
, IDEsame int NOT NULL
, CONSTRAINT PK_Iscrizioni PRIMARY KEY CLUSTERED
(
IDIscrizione
)
)
GO
CREATE PROCEDURE dbo.proc_IscriviControlla
@IDUtente int
, @IDEsame int
, @ErrorNumber int = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Conteggio int
-- conto gli iscritti per esame
SELECT
@Conteggio = COUNT(*)
FROM
dbo.Iscrizioni
WHERE
IDEsame = @IDEsame
IF @Conteggio >= 10 -- sarebbe meglio mettere il 10 in una tabella di parametri di configurazione e non cablarla nel codice
BEGIN
-- errore di superamento
SET @ErrorNumber = 1
-- esco con errore
RETURN
END
-- inserisco poichè è tutto corretto
INSERT INTO dbo.Iscrizioni (IDUtente, IDEsame, DataIscrizione)
VALUES (@IDUtente, @IDEsame, GETDATE())
END
GO
DECLARE @Errore int
SET @Errore = 0
-- esempio esame 1, 10 utenti
EXEC dbo.proc_IscriviControlla 1, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 2, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 3, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 4, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 5, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 6, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 7, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 8, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 9, 1, @Errore OUTPUT
SELECT @Errore as Errore
EXEC dbo.proc_IscriviControlla 10, 1, @Errore OUTPUT
SELECT @Errore as Errore
-- dopo il decimo, errore = 1
EXEC dbo.proc_IscriviControlla 11, 1, @Errore OUTPUT
SELECT @Errore as Errore
GO
DROP TABLE dbo.Iscrizioni
DROP PROCEDURE dbo.proc_IscriviControlla
GO