Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

TIP [MS SQL SRV 2000] – AUTOINCREMENT FIELDS

Digital Innovation Partner

TIP [MS SQL SRV 2000] – AUTOINCREMENT FIELDS

L’utilizzo dei campi autoincrementali che vengono chiamati in Ms-SqlSrv “identity” ed ad esempio in interbase “generator” (generatori), è una pratica molto importante, soprattutto quando una tabella in un permette l’accesso contemporaneo in lettura scrittura a più utenti. Questi generatori nei db transazionali garantiscono l’univocità xchè generati dal server in modo da non permettere collisioni in inserimento. D’altro canto nelle applicazioni tali generatori creano altre difficoltà , la principale è che essendo il valore del campo generato dal server l’applicazione generalmente all’atto dell’inserimento non sa che valore è stato attribuito. E ciò puo comportare un serio problema !!! In Ms-Sql server è possibile invece tramite una stored procedure avere per ogni inserimento l’immediato valore del’identità della tabella.

Piccolo Esempio:


SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE DO_FR_REQUEST

@ID_FR_REQUEST INT , @FR_XML TEXT = ”, @ID_OUT INT OUTPUT
AS
DECLARE @MY_ID INT;
DECLARE @ID_REQUEST INT;
DECLARE @NUMORD VARCHAR(50);

SELECT @ID_REQUEST=ID_REQUEST FROM FR_REQUEST WHERE ID_FR_REQUEST = @ID_FR_REQUEST;
set @MY_ID = 0;
UPDATE FR_REQUEST SET CORRENTE = ‘N’ WHERE ID_REQUEST = @ID_REQUEST

INSERT INTO [TB_NAME]([ID_REQUEST], [DELIVERY], [SERVICE], [MASTER], [SUBSCRIBER], [USERID], [PASSWORD], [PRODUCT], [CCIAA], [NAME], [COMP_NAME],
[COUNTY], [TOWN], [FISCAL_CODE], [SOPTION], [FORM_TYPE], [FR_XML], [NumOrd], [CORRENTE])
(SELECT [ID_REQUEST], [DELIVERY], [SERVICE], [MASTER],
[SUBSCRIBER], [USERID], [PASSWORD], [PRODUCT], [CCIAA], [NAME], [COMP_NAME], [COUNTY], [TOWN], [FISCAL_CODE], [SOPTION], [FORM_TYPE], @FR_XML, [NumOrd],
‘S’
FROM [TB_NAME]
WHERE ID_FR_REQUEST = @ID_FR_REQUEST)

SELECT @MY_ID = @@IDENTITY
/* PERMETTE DI LEGGERE IL VALORE DEL CAMPO IDENTITA DELLA TEBELLA IN CUI SI E’ APPENA FATTO L’INSERT */

SELECT @ID_OUT = @MY_ID
–EXEC [WriteLog] @id_request, cast(@MY_ID as VarChar(10)), ‘N’
GO
SET
QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Lascia un commento