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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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])<BR>(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 |