[SQL] Variabili inserite dall'utente

martedì 21 marzo 2006 - 17.15

Hamelin [FL] Profilo | Junior Member

Un saluto e un ringraziamento a chi saprà rispondere, sperando che sia il posto giusto in cui chiedere

Dovrei fare una view che estrae campi da una tabella in base a un valore inserito dall'utente

Cioè qualcosa tipo il seguente codice, che funziona:

DECLARE @DataInizio VarChar(50)
SET @DataInizio = '2005-01-31'

SELECT ...
FROM ...
WHERE Data BETWEEN @DataInizio AND '2005-12-31'


Ma, al posto di sette la variabile @DataInizio al valore '2005-01-31', settarla a un valore inserito dall'utente al momento dell'esecuzione della view

Sapreste dire se è possibile? Spero di aver dato sufficienti informazioni

Ciciu Profilo | Senior Member

Ciao.
Non so se sia possibile, ma non credo...
Quello che posso dirTi è che, solitamente, una vista contiene TUTTI i records necessari, al limite filtrati per tipologie.
Mi spiego. Immagina di avere una tabella che contiene dei movimenti di magazzino.
PotresTi, per assurdo, voler fare due viste, una che restituisce i movimenti di entrata ed una che restituisce quelli di uscita.
Le viste in questione, non saranno filtrate per data, ma solo per tipologia di movimento.
Quando l'Utente ne avrà bisogno, sarà compito della procedura impostare il filtro corretto, appoggiandosi, eventualmente, agli indici creati sulla tabella (una vista non può avere indici).

Il vantaggio della vista è quello di farTi vedere i dati nella maniera che Ti serve, collegando tra loro tabelle e filtrando i records per "sommi capi", che devono essere comunque comuni a tutti gli utenti. Se poi un Utente ha esigenze particolari, allora la procedura gli permetterà di aggiungere filtri alla vista.

Ciao - Fabio


Fabio G

franco_44 Profilo | Newbie

Scusa ma non ho capito bene? Ma tu vuoi filtrare dei dati digitando anche la data inizio che può essere diversa da quella del Set oppure....
Ciao
franco

lbenaglia Profilo | Guru

>Dovrei fare una view che estrae campi da una tabella in base
>a un valore inserito dall'utente

Ciao Hamelin [FL],

Da come definisci le variabili mi sembra di capire che tu stia utilizzando SQL Server, giusto?
Lo standard ANSI SQL al quale aderisce anche SQL Server non prevede viste parametriche pertanto devi optare per una soluzione alternativa.
A partire dalla versione 2000, SQL Server offre 3 tipi di user-defined functions (UDF) ed uno di essi può essere accomunato ad una vista parametrica.

Cercherò di mostrarti un piccolo esempio:

USE tempdb; GO /* Definisco la Inline Table-valued function dbo.udf_GetOrdersByDate */ CREATE FUNCTION dbo.udf_GetOrdersByDate( @OrderDate smalldatetime ) RETURNS TABLE AS RETURN( SELECT OrderID, CustomerID, OrderDate FROM Northwind.dbo.Orders WHERE OrderDate = @OrderDate ) GO /* Esempi */ SELECT * FROM dbo.udf_GetOrdersByDate('19960704'); GO /* Output: OrderID CustomerID OrderDate ----------- ---------- ------------------------ 10248 VINET 1996-07-04 00:00:00.000 (1 row(s) affected) */ SELECT * FROM dbo.udf_GetOrdersByDate('19960719'); GO /* Output: OrderID CustomerID OrderDate ----------- ---------- ------------------------ 10260 OTTIK 1996-07-19 00:00:00.000 10261 QUEDE 1996-07-19 00:00:00.000 (2 row(s) affected) */ /* Pulizia */ DROP FUNCTION dbo.udf_GetOrdersByDate;

Se sei interessato ad approfondire l'argomento UDF, leggi il seguente paragrafo sui Books Online:
http://msdn.microsoft.com/library/en-us/tsqlref/ts_create_7r1l.asp

Inoltre ho notato che nei tuoi esempi utilizzi un formato data non standard.
Prova a leggere il seguente tip:
http://www.dotnethell.it/tips/SQLServerDates.aspx

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

>Quando l'Utente ne avrà bisogno, sarà compito della procedura
>impostare il filtro corretto, appoggiandosi, eventualmente, agli
>indici creati sulla tabella (una vista non può avere indici).

Ciao Fabio,

volevo aggiungere che molti dbms sono in grado di creare viste materializzate, quindi viste dotate di data pages che vengono sincronizzate ad ogni modifica sulle tabelle base.
SQL Server a partire dalla versione 2000 permette di materializzare una vista definendo su di essa un indice clustered unique.
Tutti i dettagli sui Books Online:

"Creating an Indexed View"
http://msdn.microsoft.com/library/en-us/createdb/cm_8_des_06_9jnb.asp

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5