Group: microsoft.public.it.sql




Subject: Recuperare numeri non in uso..
From: Lorenzo Benaglia
Date: 5/3/2007 11:54:42 AM
Marco Valerio Platania wrote: > Vorrei sapere se è possibile recuperare i numeri non in uso... Ciao Marco, Un'idea potrebbe essere quella di scrivere una semplice UDF table valued che accetti in input l'estremo superiore della serie numerica che vuoi generare e che restituisce un result set di una sola colonna con tutti i numeri della serie partendo da 1; a questo punto ti propongo 2 query: - La prima utilizza una classica outer join; - La seconda si basa sul nuovo operatore EXCEPT introdotto in SQL Server 2005. USE tempdb; CREATE TABLE dbo.Numeri( Numero int NOT NULL ); GO CREATE FUNCTION dbo.ufn_Numbers( @MaxNumber int ) RETURNS @Numbers TABLE( Number int ) AS BEGIN DECLARE @idx int SET @idx = 1 WHILE @idx <= @MaxNumber BEGIN INSERT @Numbers VALUES (@idx) SET @idx = @idx + 1 END RETURN END GO INSERT dbo.Numeri VALUES(5); INSERT dbo.Numeri VALUES(8); INSERT dbo.Numeri VALUES(13); /* Soluzione per SQL Server 2000 */ SELECT F.Number FROM dbo.Numeri AS N RIGHT JOIN dbo.ufn_Numbers(12) AS F ON N.Numero = F.Number WHERE N.Numero IS NULL; /* Soluzione per SQL Server 2005 */ SELECT Number FROM dbo.ufn_Numbers(12) EXCEPT SELECT Numero FROM dbo.Numeri; /* Output: Number ----------- 1 2 3 4 6 7 9 10 11 12 (10 row(s) affected) */ DROP FUNCTION dbo.ufn_Numbers; DROP TABLE dbo.Numeri; > Grazie a tutti .. Prego. Ciao! -- Lorenzo Benaglia Microsoft MVP - SQL Server http://blogs.dotnethell.it/lorenzo http://italy.mvps.org

Subject: Recuperare numeri non in uso..
From: Andrea Montanari
Date: 5/3/2007 12:15:09 PM
salve Marco, Marco Valerio Platania wrote: > Ho un tabella... con un solo campo... > > Numero > --------- > 5 > 8 > 13 > > Vorrei sapere se è possibile recuperare i numeri non in uso... > tramite una qualche funzione che dovrebbe restituire > > Numero > ------- > 1 > 2 > 3 > 4 > 6 > 7 > 9 > 10 > 11 > 12 > > > Magari.. senza usare cursori...... pensavo a mettere in join la mia > tabella con una tabella creata al volo contenente i numeri tra il > minimo e massimo dei numeri contenuti nella mia tabella. Così dato un > opportuno join otterei i numeri non contenuti nella mia tabella... Ma > non so come riempire al volo la nuova tabella da mettere in join > contenente il range di numeri.. > Spero di essere stato chiaro. > Grazie a tutti .. > Marco. puoi ance vedere http://www.sqlserverfaq.com/controls/kbase/store/CodeLib/9.htm saluti -- Andrea Montanari (Microsoft MVP - SQL Server) http://www.asql.biz http://italy.mvps.org DbaMgr2k ver 0.21.0 - DbaMgr ver 0.65.0 and further SQL Tools --------- remove DMO to reply