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
|