Dichiarazione variabile

mercoledì 17 giugno 2009 - 16.32

sergino Profilo | Newbie

ciao a tutti,

sto creando una procedura che restituisca dei dati.
devo dichiarare una variabile (nome_vendita) che è il risultato di una select e può assumere più di un valore (Es: vendita1, vendita2)
dopo di che devo eseguire un'altra query basata sulla variabile, per fornire dei dati sulle vendite del giorno. (Es. quindi dati relativi alla vendita1, dati relativi alla vendita2)

Visto che posso avere più di una vendita ho questo errore

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.


DECLARE @suppliername varchar (40)

set @suppliername = (select (right(name,CHARINDEX('-', REVERSE (name))-1)) as 'name' from purchaseorders pur
where created >= (SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
and status ='warehouseProcessed')

come posso risolvere?

grazie mille
sergio

alx_81 Profilo | Guru

>ciao a tutti,
ciao

>Visto che posso avere più di una vendita ho questo errore
>Subquery returned more than 1 value. This is not permitted when
>the subquery follows =, !=, <, <= , >, >= or when
>the subquery is used as an expression.

>come posso risolvere?
semplicemente devi fare in modo che la query torni un solo valore, quello prescelto. Se ti servono più valori, potresti pensare di inserirli in una tabella temporanea che poi userai come tabella di relazione (join) per ricavare solo i valori che si legano con quelli della tua tabella.

>grazie mille
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

sergino Profilo | Newbie

ciao Alex,
ho seguito il tuo consiglio della tabella temporanea, ma in realtà non la creo: ho fatto cos':

select o.name, o.status, count (*)
from
(select (right(name,CHARINDEX('-', REVERSE (name))-1)) as name, status from dbo.purchaseorders
where created >= (SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
and status like ''%status%'') as o
inner join purchaseorders ON purchaseorders.name = o.name
group by o.name, o.status

il risulato sembra corretto.
Ora vorrei inviare via email il risultato della query - utilizzo la sp_send_dbmail - e anche qui non riscontro problemi.

vorrei però creare un job che - se il risultato della query contiene informazioni, invia l'output. Se il risultato della query non ritorna niente, invia una email con un testo del tipo "non ci sono dati"
Quello a cui stavo pensando è:

select (right(name,CHARINDEX('-', REVERSE (name))-1)) as name, count(*) from dbo.purchaseorders
where created >= (SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
and status like '%status%'
group by name
if @@ROWCOUNT > 0
........ (inserisco dettagli della sp_send_dbmail per allegare il risultato della query)

......
ELSE
.... (inserisco dettagli della sp_send_dbmail per informare che non ci sono dati)

che ne pensI?
si potrebbe creare un job così?

grazie mille!

sergio

alx_81 Profilo | Guru

>ciao Alex,
ciao
io ti parlavo di tabelle temp per evitarti le subquery, ma tu hai usato le subquery, va bene comunque.

>select (right(name,CHARINDEX('-', REVERSE (name))-1)) as name,
>count(*) from dbo.purchaseorders
> where created >= (SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
> and status like '%status%'
>group by name
>if @@ROWCOUNT > 0
>........ (inserisco dettagli della sp_send_dbmail per allegare
>il risultato della query)
>
>......
>ELSE
>.... (inserisco dettagli della sp_send_dbmail per informare che
>non ci sono dati)
>
>che ne pensI?
>si potrebbe creare un job così?
fai una bella stored procedure e poi dal job lanci la stored procedure con quel codice.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

sergino Profilo | Newbie

non ho mai fatto una store procedure.
come posso iniziare?
sergio

alx_81 Profilo | Guru

> non ho mai fatto una store procedure.
>come posso iniziare?
così http://msdn.microsoft.com/it-it/library/ms187926.aspx
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5