Qualcosa su di me

Mi chiamo Andrea Moro, sono un appassionato di informatica da quando avevo 8 anni e da quando mio padre mi regalò il C64.

Qualche anno più tardi, il mio primo pc e nel 1994 la prima esperienza con Internet, di cui mi sono subito innamorato e con cui oggi mando avanti la mia attività di Web Designing e posizionamento nei motori di ricerca.

View Andrea Moro's profile on LinkedIn

Calendar

<<  dicembre 2008  >>
lumamegivesado
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar


RSS

Ok, diciamo che questa soluzione l'ho scritta nel 2001, all'epoca non facevo uso di blogs, quindi me la sono tenuta per me e per qualche - forse - post negli apposti NG, ma nulla di più.
Oggi stavo mettendo le mani su di un mezzo programmino che mi sto scrivendo per uso interno, e cercavo un sistema elegante per sapere se la mia Identity Column con la prossima insert mi sfora il valore massimo consentito. Beh, gira che rigira, o ho cercato male io o effettivamente nulla di più elegante non ci sta.
Pure cercando nel mio account di SQL Magazine non ho trovato nulla, solo un post del 2001 di Moran ma che lascia forti dubbi e tutto dipende da quanto si usa il DB.
Non mi ritengo un DBA ... questo no, e forse questa soluzione verrà castrata immediatamente, però la ritengo semplice e funzionale. Quindi a vostra disposizione.

CREATE  FUNCTION [dbo].[MAXINTVALUE](@TABLENAME VARCHAR(30)
 ,@COLUMNNAME VARCHAR(30)
)
RETURNS BIGINT

AS
BEGIN
 DECLARE @PRECISION TINYINT
 ,@MAXVAL BIGINT
 SELECT @PRECISION = COLUMNPROPERTY(OBJECT_ID(@TABLENAME),
            @COLUMNNAME,
'PRECISION')
 SELECT @MAXVAL = CASE @PRECISION
 WHEN 19 THEN 9223372036854775807
 WHEN 10 THEN 2147483647
 WHEN 5 THEN 32767
 END
 RETURN @MAXVAL
END

Velocemente commento con il fatto che, ovviamente, la tabella deve avere una colonna di tipo identity e che quello che ritorna è il valore massimo a seconda della scala di precisione adottata.

Con questo valore di ritorno, semplicemente facendo una cosa del tipo

IF IDENT_CURRENT('TABLE1') <= DBO.MAXINTVALUE('TABLE1''FLD_ID')

Possiamo sapere se stiamo nei limiti oppure se con qualche altro check dobbiamo fare altro.


Vota questo post per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5




Aggiungi commento


(Visualizza la tua icona Gravatar)  

  Country flag


  • Commento
  • Anteprima
Loading



Advanced Technology

Abruzzo SEO specialist, .Net programming and computer stuff