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