Newsgroup: it.comp.software.database
Titolo: problema con query sql-server

Ciao a tutti,
    in una store procedure di Sql-Server richiamo una function che mi
restituisce un certo numero di risultati in questo modo:
Select * from dbo.f_split(@settore)
Se restituisse un solo risultato farei:
set @valore=(select nomecampo from dbo.f_split(@settore)
ma i risultati possono essere di più come faccio? Ho pensato prima a un
cursore ma sono sconsigliati perchè lenti.
Devo passare questi valori a un'altra query. Posso farlo con un ciclo for?
come?
Grazie,
ciao

    in una store procedure di Sql-Server richiamo una function che mi
ma le function possono restiruire un resultset? Le SP sono sicuro di si, ma 
le function mi sembra che concettualmente... 


Ciao Paolo,
In SQL Server 2000 le user defined function possono restituire sia scalari
che result set.
Ti incollo un pezzetto dei Books Online che illustrano la sintassi dei 3
tipi di UDF utilizzabili:
Scalar Functions
----------------
CREATE  FUNCTION [ owner_name. ] function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] }
[ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [ [,] ...n] ]
[ AS ]
BEGIN
    function_body
    RETURN scalar_expression
END
Inline Table-valued Functions
-----------------------------
CREATE FUNCTION [ owner_name. ] function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] }
[ ,...n ] ] )
RETURNS TABLE
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
RETURN [ ( ] select-stmt [ ) ]
Multi-statement Table-valued Functions
--------------------------------------
CREATE FUNCTION [ owner_name. ] function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] }
[ ,...n ] ] )
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
BEGIN
    function_body
    RETURN
END
< function_option > ::=
    { ENCRYPTION | SCHEMABINDING }
< table_type_definition > :: =
    ( { column_definition | table_constraint } [ ,...n ] )
Ogni dettaglio sui BOL.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 Grazie
Prego


 Ciao,
grazie per aver risposto e per l'aiuto a entrambe.
Provo a spiegarmi meglio :)
Da una pagina asp richiamo una store procedure dove tra i parametri c'č una
variabile settore per esempio cosě : settore='1.2.3.'
Io devo estrarre i valori 1 2 e 3
Per far questo richiamo all'interno della store procedure una function
definita
nel db che restituisce una tabella con i valori trovati nella stringa:
CREATE FUNCTION dbo.f_split
(
@temp VARCHAR(8000)
)
RETURNS @table TABLE
(
number INT
)
AS
BEGIN
DECLARE @endIndex INT
DECLARE @startIndex INT
SET @endIndex = 0
SET @startIndex = 1
SELECT @endIndex=CHARINDEX('.',@temp,0)
WHILE @endIndex > 0
BEGIN
INSERT INTO @table SELECT
CAST(SUBSTRING(@temp,@startIndex,@endIndex-@startIndex) AS INT)
SET @endIndex = @endIndex + 1
SET @startIndex = @endIndex
SELECT @endIndex=CHARINDEX('.',@temp,@endIndex)
END
RETURN
END
Nella Store procedure la richiamo in questo modo:
Select * from dbo.f_split(@settore)
a questo punto nasce il mio problema come faccio ad avere i valori che
restituisce? Il recordset come faccio a gestirlo all'interno della store
procedure?
Spero di essere riuscita a spiegarmi
Grazie
ciao

 Grazie
Prego.


Ciao,
 ecco la store procedure
CREATE PROCEDURE [ElencoAttivita]
(
@esito varchar(50) out,
@settore varchar(100)
)
AS BEGIN
 SET @esito=''
 DECLARE @ERRORE INT
 SET          @ERRORE = 0
 DECLARE @stringa_sql varchar(3000)
 --eseguo la fuction per recuperare i valori passati come settore.
  Select * from dbo.f_split(@settore)
  -- a questo punto dovrei costruire una query con i valori restituiti dalla
function
 -- questo adesso è quello che voglio ottenere
     SET @stringa_sql='SELECT * FROM  tabellaWHERE 1=1  '
   --for per tutti i risultati restituiti
     IF (@valorerestituito[i]<>-99)
         SET @stringa_sql=@stringa_sql + ' AND id=' + @valorerestituito[i]
 SET @ERRORE = @@ERROR
 IF @ERRORE <> 0
   SET @esito=@ERRORE
 RETURN
END
GO
Ciao e grazie

 Ciao e grazie


Ciao,
  grazie per la disponibilitą e per l'aiuto č quello il problema :-))))))
Grazie
ciao