Newsgroup: it.comp.lang.visual-basic
Titolo: simulare ROWNUM di Oracle con SQLServer

Ciao a tutti.
Stavo provando a simulare il valore restituito da ROWNUM di Oracle con 
SQLServer, ma senza risultato.
Ecco alcune vie (sbagliate) che ho tentato:
declare @a int
set @a = 0
select @a=@a+1, * from Tabella t
declare @a int
set @a = 0
select (select @a=@a+1) a, * from Tabella t
Se avete idee, fatevi vivi.
Grazie
Daniele


Se non ho capito male vuoi fare qualcosa del genere:
declare @mytable TABLE (
 [rownum] [int] IDENTITY (0, 1) NOT NULL ,
 [testo1] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
 [testo2] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
 [testo3] [varchar] (14) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
 [testo4] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
insert into @mytable ([testo1],[testo2],[testo3],[testo4]) select
[testo1],[testo2],[testo3],[testo4] from tabella_reale
select * from @mytable
William.

  [rownum] [int] IDENTITY (0, 1) NOT NULL ,
se vuoi partire a contare da 1 anzichč da 0 usa identity (1,1)
William.

 
Hai capito malissimo.
A me interessa, in una SELECT qualunque, avere il numero di riga come 
avviene in Oracle con ROWNUM. In SQLServer ROWNUM non esiste e stavo 
cercando un modo per simularlo. 1 l'ho trovato, ma non è molto 
applicabile...


Non so cosa faccia rownum in Oracle però guardando i tuoi esempi direi che
quello che volevi fare è esattamente quello che fa il codice che ho scritto.
William.

 
Tu crei una tabella ad hoc. Lui ha una tabella senza un campo contatore 
ed ha bisogno di una select che ritorni anche una numerazione 
progressiva dei record restituiti (come fa enterprise manager o query 
analyzer quando esegui una query). Evidente l'OP non puo' aggiungere un 
campo contatore alla sua tabella e comunque anche il campo contatore non 
assolverebbe alla funzione che lui richiede.
	maxx
p.s. Non mi viene in mente nessun modod semplice ma un modo potrebbe 
essere quello di scorrere tutti i campi con FETCH.

 essere quello di scorrere tutti i campi con FETCH.
Forse qui c'e' qualcosa che potrebbe funzionare (con qualche adattamento):
http://groups-beta.google.com/group/microsoft.public.it.sql/browse_thread/thread/3293de557a674b0c/92fa27b74726b561?q=numerazione+record+select&rnum=10&hl=en#92fa27b74726b561
	maxx

 applicabile...
questa funzionalita' non e' direttamente presente nella versione attuale di 
SQL Server, mentre lo sara' nella versione 2005...
al momento l'unico modo di ottenere questo risultato consta nell'utilizzare 
una tabella temporanea con l'aggiunta di una colonna con proprieta' IDENTITY 
impostata...
quindi
SET NOCOUNT ON
USE Pubs
GO
CREATE TABLE #authors (
 [rnum] int IDENTITY,
 [au_id] varchar(12) NOT NULL ,
 [au_lname] [varchar] (40) ,
 [au_fname] [varchar] (20) ,
 [phone] [char] (12) ,
 [address] [varchar] (40) ,
 [city] [varchar] (20) ,
 [state] [char] (2) ,
 [zip] [char] (5) ,
 [contract] [bit] NOT NULL
 )
INSERT INTO #authors (
  [au_id] ,
  [au_lname] ,
  [au_fname] ,
  [phone] ,
  [address] ,
  [city] ,
  [state] ,
  [zip] ,
  [contract]
  )
 SELECT * FROM dbo.authors
  WHERE [au_lname] LIKE 'Gre%'
  ORDER BY [au_lname]
SELECT * FROM #authors
DROP TABLE #authors
-- oppure
SELECT IDENTITY( int , 1 ,1 ) AS [rnum] ,*
 INTO #authors
 FROM dbo.authors
 WHERE [au_lname] LIKE 'Gre%'
 ORDER BY [au_lname]
SELECT * FROM #authors
DROP TABLE #authors
il secondo metodo,  seppur piu' compatto, puo' pero' produrre risultati non 
corretti nella generazione del rownum, visto che l'esplosione della select 
list avviene, nella generazione dell'output da parte dell'engine, 
precedentemente all'operazione di ordinamento prevista dalla clausola ORDER 
BY, che notoriamente non rientra nella query in quanto tale ma corrisponde 
ad un'operazione in effetti successiva appunto di cursore.
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.14.0  -  DbaMgr ver 0.59.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual 
interface)
--------- remove DMO to reply 

 essere quello di scorrere tutti i campi con FETCH.
A questo punto l'unica cosa che mi viene in mente potrebbe qualcosa del
genere (ammesso non abbia già un campo identity nella tabella):
SELECT IDENTITY(int, 1,1) AS ID_Num, *
INTO tabtemp
FROM tabreale
SELECT * FROM tabtemp
DROP TABLE tabtemp
William.