Controllo record già inserito

martedì 28 ottobre 2008 - 10.51

bolla111 Profilo | Senior Member

voglio fare una query che mi controlli se un record è già stato inserito...
ho provato ad usare questa:
SELECT count(IDPROD) FROM DETTAGLI INNER JOIN PRODOTTI ON DETTAGLI.IDPROD=PRODOTTI.ID WHERE DETID=@DETID AND DETID2=@DETID2 AND ID=@ID".
DETID e DETID2 è la chiave primaria della tabella dettagli. IDPRODè chiave esterna.
quindi conto quanti prodotti sono inseriti nella tabella dettagli, che hanno come DETID un valore che gli passo (è uguale x tutti nel mio caso), come DETID2 un valore progressivo e come ID quello che gli vado ad inserire.
se il conteggio è = 0 il rpogramma continua, se è =1 mi fermo. il fatto è che questa query mi conta tutti i dettagli, anche se inserisco un prodotto che non ho ancora inserito (quindi un diverso id)...dove sbaglio?
oppure c'è un altro modo x farlo?
grazie

lbenaglia Profilo | Guru

>dove sbaglio?
Che DBMS utilizzi?
Puoi postare i comandi di CREATE TABLE delle tabelle, alcune righe di prova ed il risultato che vorresti ottenere con quei dati?

>grazie
Prego.

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

bolla111 Profilo | Senior Member

uso ms sqlserver
di posso postare il codice lato server che uso x fare inserimento / modifica... cmq è la query che non fa quello che voglio...



'Bottone Salva
Protected Sub ButtonSalva_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonSalva.Click

Dim contr As Integer = 0

'Controllo inserimento quantità
Dim qtacorretta As Boolean = True
Try
Dim qta As Integer = CInt(TextDAQTA.Text)
Dim prod As Integer = CInt(TextPRID.Text)
qtacorretta = True
Catch ex As Exception
qtacorretta = False
End Try

If (qtacorretta) Then

connn = New SqlClient.SqlConnection("Server=APPLE-XP\SQLEXPRESS;Database=Attivita;Trusted_Connection=True;Integrated Security=True")
connn.Open()

Dim SqlIns As String = ""

If DTLAGGMOD.Text = "INSERIMENTO" Then

'§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
'Imposta il Progressivo
TextDAID.Text = GetNextDAID()
'§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

'Controllo inserimento prodotto già esistente nella tabella delasstask
Dim Sqlcontr As String = ""
Sqlcontr = "SELECT count(DAPRID) FROM DTLASSTASK INNER JOIN ESPRODOTTI ON DTLASSTASK.DAPRID=ESPRODOTTI.PRID WHERE TAID=@TAID AND DAID=@DAID AND PRID=@PRID"
Dim getcount As SqlClient.SqlCommand
getcount = New SqlCommand(Sqlcontr, connn)
getcount.Parameters.Add("TAID", SqlDbType.Decimal)
getcount.Parameters("TAID").Value = CInt(TextTAID.Text)
getcount.Parameters.Add("DAID", SqlDbType.Decimal)
getcount.Parameters("DAID").Value = CInt(TextDAID.Text)
getcount.Parameters.Add("PRID", SqlDbType.Decimal)
getcount.Parameters("PRID").Value = CInt(TextPRID.Text)

Dim ds As SqlDataReader
ds = getcount.ExecuteReader
If ds.HasRows Then
Try
contr = 1
Catch ex As Exception
contr = 0
End Try
End If



poi c'è tutto il pezzo con la query x l'insert è quella x l'update...ma non è necessario postarla

lbenaglia Profilo | Guru

>uso ms sqlserver
Bene.

>poi c'è tutto il pezzo con la query x l'insert è quella x l'update...ma
>non è necessario postarla
Certo, non è necessario, ma io ti ho chiesto un'altra cosa:
Puoi postare i comandi di CREATE TABLE delle tabelle, alcune righe di prova ed il risultato che vorresti ottenere con quei dati?

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

bolla111 Profilo | Senior Member

non uso comandi create table...le tabelle le ho create direttamete da ms sql server

lbenaglia Profilo | Guru

>non uso comandi create table...le tabelle le ho create direttamete
>da ms sql server
OK, ma a noi servono i comandi per riprodurre la situazione.
Genera gli script da Enterprise Manager/SQL Server Management Studio e postali insieme ad una manciata di INSERT, e facci un esempio chiaro del risultato che vorresti ottenere con quei dati.

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

bolla111 Profilo | Senior Member

ho risolto...invece si select count(valore) ho fatto una select normale e non ho utilizzato il secondo campo chiave(il progressivo)
grazie cmq...

lbenaglia Profilo | Guru

>ho risolto...invece si select count(valore) ho fatto una select
>normale e non ho utilizzato il secondo campo chiave(il progressivo)

Occhio che eseguire una aggregazione solo per valutare l'esistenza o meno di una riga, non è una scelta furba
Probabilmente otterresti prestazioni superiori utilizzando una IF EXISTS(SELECT * FROM...)

>grazie cmq...
Prego cmq...

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

bolla111 Profilo | Senior Member

beh...proverò anche quella...ciao
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