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
Ho un probblemino...
mercoledì 25 febbraio 2009 - 00.08
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mayck
Profilo
| Newbie
15
messaggi | Data Invio:
mer 25 feb 2009 - 00:08
ciao a tutti,
mi sono appena iscritto al forum, anche se spesso visito questo sito alla ricerca di idee e soluzioni...
Ma veniamo al dunque,
Sto utilizzando MSSQL Express 2005 sp3 insieme al Menagement studio.
Sto cercando di eseguire la seguente query:
create table Turno(
Codice int identity primary key,
DataOraInizio smalldatetime not null,
DataOraFine smalldatetime
check ( 1 = (select count(*)
from Turno T
where DataOraFine is null)),
Dipendente varchar(16) not null
references Dipendente(CodiceFiscale)
)
Solo che ottengo il seguente errore:
Messaggio 1046, livello 15, stato 1, riga 5
In questo contesto sono consentite solo espressioni scalari, non subquery.
Qualcuno sa spiegarmi perche non posso utilizzare subquery?
Grazie.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 25 feb 2009 - 09:25
>Messaggio 1046, livello 15, stato 1, riga 5
>In questo contesto sono consentite solo espressioni scalari,
>non subquery.
>
>Qualcuno sa spiegarmi perche non posso utilizzare subquery?
Ciao Michele,
Semplicemente perché non puoi utilizzare subquery.
Puoi spiegarci in maggior dettaglio che genere di constraint vorresti implementare?
>Grazie.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
mayck
Profilo
| Newbie
15
messaggi | Data Invio:
mer 25 feb 2009 - 10:08
La query non era completa, sorry. Di segutio riporto la querry corretta.
create table Turno(
Codice int identity primary key,
DataOraInizio smalldatetime not null ,
DataOraFine smalldatetime,
Dipendente varchar(16) not null
references Dipendente(CodiceFiscale),
check ( 0 = (select count(*)
from Turno T
where DataOraFine is null and T.Dipendente = Dipendente))
)
La tabella deve contenere i turni dei dipendenti, ad inizio turno (quando il dipendente timbra il cartellino) viene aggiunto un nuovo record nella tabella: Codice=x, DataOraInizio = xx/xx/xx xx:xx, DataOraFine=null, Dipendente = abcdefghlmn), a fine turno (quando il dipendente timbra nuovamente il cartellino) viene valorizzato l'attributo DataOraFine del record precedentemente immesso: DataOraFine = xx/xx/xx xx:xx dove Dipendente = abcdefghlmn e DataOraFine = null.
Con l'istruzione check devo controllare che non deve essere possibile inserire un nuovo record ( per un determinato dipendente ) se c'è almeno un record con l'attributo DataOraFine a null, perciò se un dipendente a timbrato l'ingresso non potra timbrare un nuovo ingresso finche non avrà timbrato l'uscita dell'ingresso precedente.
Spero di essere stato chiaro.
Non capisco perchè non posso utilizzare subquery, l'sql lo permette, almeno nel libro dove lo sto studiando io.
Grazie.
mayck
Profilo
| Newbie
15
messaggi | Data Invio:
mer 25 feb 2009 - 20:40
Forse ho risolto,
ho creato la tabella cosi:
create table Turno(
Codice int identity primary key,
DataOraInizio smalldatetime not null,
DataOraFine smalldatetime not null,
Dipendente varchar(16) not null
references Dipendente(CodiceFiscale)
)
ho creato una funzione cosi:
create function dbo.check_Turno_DataOraFine (@Dipendente varchar(16))
returns tinyint
as
begin
declare @ret tinyint
set @ret = (select count(*) from Turno T where T.DataOraFine is null
and T.Dipendente = @Dipendente)
return @ret
end
go
ho inserito un constraint nella tabella Turno cosi:
alter table Turno add constraint constraint_Turno_DataOraFine check(
dbo.check_Turno_DataOraFine(Dipendente) <= 1
)
Sembra che funzioni.
Comunque non capisco perchè l'MSSQL non mi permetta di utilizzare le subquery nelle CREATE TABLE!
Grazie.
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 !