Newsgroup: it.comp.appl.access
Titolo: Poichè nessuno mi risponde, riduco le pretese...

Forse ho esagerato con le domande nel mio precedente post del 5/1/2000 da titolo
"Upsize a Progetto Access/Sql Server 7.0 - Parametri e Funzioni Transact-SQL".
Riduco quindi le domande fondamentalmente a una: Dovendo convertire una query in una
'stored procedure' di Sql Server 7.0 mi trovo spiazzato in quanto nel linguaggio
T-SQL (Transact-SQL) non trovo più certe Funzioni cui ero abituato, in particolare la
funzione IIF.
D'accordo che in certi casi sarà sufficiente spostare il test dalla query al
controllo, ma non sempre è così facile.
Qualche suggerimento?
Grazie
Cal...@ciaoweb.it



Devi usare l'istruzione CASE in T-SQL.
Quanto segue è tratto dal Book on Line di SQL Server 7.0.
CASE (T-SQL)
Evaluates a list of conditions and returns one of multiple possible
result expressions. 
CASE has two formats: 
The simple CASE function compares an expression to a set of simple
expressions to determine the result. 
The searched CASE function evaluates a set of Boolean expressions to
determine the result. 
Both formats support an optional ELSE argument. 
Syntax
Simple CASE function:
CASE input_expression
    WHEN when_expression THEN result_expression
        [...n]
    [
        ELSE else_result_expression
    ]
END
Searched CASE function:
CASE
    WHEN Boolean_expression THEN result_expression
        [...n]
    [
        ELSE else_result_expression
    ]
END
Arguments
input_expression 
Is the expression that is evaluated when using the simple CASE format.
input_expression is any valid Microsoft® SQL Server™ expression. 
WHEN when_expression 
Is a simple expression to which input_expression is compared when
using the simple CASE format. when_expression is any valid SQL Server
expression. The data types of input_expression and each
when_expression must be the same or must be an implicit conversion. 
n 
Is a placeholder indicating that multiple WHEN when_expression THEN
result_expression clauses, or multiple WHEN Boolean_expression THEN
result_expression clauses can be used. 
THEN result_expression 
Is the expression that is returned when input_expression equals
when_expression evaluates to TRUE, or Boolean_expression evaluates to
TRUE. result expression is any valid SQL Server expression. 
ELSE else_result_expression 
Is the expression that is returned if no comparison operation
evaluates to TRUE. If this argument is omitted and no comparison
operation evaluates to TRUE, CASE returns NULL. else_result_expression
is any valid SQL Server expression. The data types of
else_result_expression and any result_expression must be the same or
must be an implicit conversion. 
WHEN Boolean_expression 
Is the Boolean expression that is evaluated when using the searched
CASE format. Boolean_expression is any valid Boolean expression. 
Result Types
Returns the highest precedence type from the set of types in
result_expressions and the optional else_result_expression. For more
information, see Data Type Precedence. 
Result Values
Simple CASE function: 
Evaluates input_expression, and then, in the order specified,
evaluates input_expression = when_expression for each WHEN clause. 
Returns the result_expression of the first (input_expression =
when_expression) that evaluates to TRUE. 
If no input_expression = when_expression evaluates to TRUE, SQL Server
returns the else_result_expression if an ELSE clause is specified, or
a NULL value if no ELSE clause is specified. 
Searched CASE function: 
Evaluates, in the order specified, Boolean_expression for each WHEN
clause. 
Returns result_expression of the first Boolean_expression that
evaluates to TRUE. 
If no Boolean_expression evaluates to TRUE, SQL Server returns the
else_result_expression if an ELSE clause is specified, or a NULL value
if no ELSE clause is specified. 
---------------
Guido
guc...@gedy.it


guc...@gedy.it
Grazie, Guido. Avevo cercato sul Book on Line ma non mi ero reso conto che la Case
potesse fare al caso mio.
Già che ci siamo: ti viene in mente qualcosa che possa sostituire la funzione NZ di
Access?
Ciao
Cal...@ciaoweb.it


Cal...@ciaoweb.it
Sempre dal Book On Line:
ISNULL (T-SQL)
Replaces NULL with the specified replacement value.
Syntax
ISNULL(check_expression, replacement_value)
Arguments
check_expression 
Is the expression to be checked for NULL. check_expression can be of
any type. 
replacement_value 
Is the expression to be returned if check_expression is NULL.
replacement_value must have the same type as check_expresssion. 
Return Types
Returns the same type as check_expression.
Remarks
The value of check_expression is returned if it is not NULL;
otherwise, replacement_value is returned.
Ciao.
---------------
Guido
guc...@gedy.it


guc...@gedy.it
Grazie a Guido ho risolto il mio problema così:
Alter Procedure SP_Arbitri_3 
	@XPnom varchar(10), 
	@XPTess varchar(10), 
	@XPNoNull varchar(10), 
	@XPSiNull varchar(10) 
As 
SELECT IdArbitro, Nominativo, Categoria, Tessera, Città,  CampoNoNull, CampoSiNull 
FROM Arbitri 
WHERE 	(CASE WHEN CampoSiNull is null then '' ELSE CampoSiNull END) LIKE
'%'+@XPSiNull+'%' 
  	 AND 
	(CASE WHEN Nominativo is null then '' ELSE Nominativo END) LIKE
'%'+@XPNom+'%' 
  	 AND 
	(CASE WHEN Tessera is null then '' ELSE Tessera END) LIKE '%'+@XPTess+'%' 
  	 AND 
	(CASE WHEN CampoNoNull is null then '' ELSE CampoNoNull  END) LIKE
'%'+@XPNoNull+'%'
Il problema era parzializzare una lista immettendo in appositi campi in calce alla
maschera (XPNom, XPTess, ecc) alcuni caratteri del nominativo (ecc.). Poichè le
colonne della tabella possono contenere valori NULL occorre individuarli con IS NULL
e trasformarli in campi di lunghezza zero (''), altrimenti il LIKE non li considera.
Grazie ancora.
Cal...@ciaoweb.it