Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Dichiarazione variabile
mercoledì 17 giugno 2009 - 16.32
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sergino
Profilo
| Newbie
44
messaggi | Data Invio:
mer 17 giu 2009 - 16:32
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
8.814
messaggi | Data Invio:
gio 18 giu 2009 - 11:48
>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
44
messaggi | Data Invio:
ven 19 giu 2009 - 15:25
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
8.814
messaggi | Data Invio:
ven 19 giu 2009 - 16:25
>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
44
messaggi | Data Invio:
ven 19 giu 2009 - 17:15
non ho mai fatto una store procedure.
come posso iniziare?
sergio
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 giu 2009 - 17:16
>
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
Torna su
Stanze Forum
Elenco Threads
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 !