Avatar billede sbjerre Nybegynder
06. april 2004 - 14:16 Der er 18 kommentarer og
2 løsninger

Query bliver ikke gennemført

Jeg har et lille(Hamrende STORT) problem med en MS SQL server 2000.

Jeg har lavet en applikation i ASP.NET der sender er query afsted til SQL serveren som følgende
DELETE FROM [Table] WHERE id = XX

Meeennn.... Den sletter IKKE alle rækker fra tabellen med det pågældende ID.

Hvordan kan det lade sig gøre?

I første havde jeg lavet SQL queryen i ASP.NET code behind filen, men nu har jeg lagt Queryen på SQL serveren som en Stored Procedure, men det løste ikke problemet. Det virker som om at den ikke når at udføre queryen før den fortsætter med næste query i ASP.NET koden.

Alle forslag er mere end velkomne da det er ved at være et bemærkelsesværdigt stort problem.

Mvh Søren
Avatar billede tille Nybegynder
06. april 2004 - 14:20 #1
prøv at trimme id og XX

DELETE FROM [Table] WHERE trim(id) = trim(XX)
Avatar billede sbjerre Nybegynder
06. april 2004 - 14:25 #2
Venligst forklar ... hvad vil det sige at trimme id....
Den havde jeg ikke lige hørt før :)
Avatar billede sbjerre Nybegynder
06. april 2004 - 14:41 #3
Det viser sig at det hedder LTRIM og RTRIM i MS SQL server 2000 men det virker desværre heller ikke....
Avatar billede arne_v Ekspert
06. april 2004 - 14:51 #4
Hvad felt type er id ?
Avatar billede sbjerre Nybegynder
06. april 2004 - 14:55 #5
int
Avatar billede arne_v Ekspert
06. april 2004 - 15:00 #6
Ja - så er trim næppe vejen frem ...
Avatar billede arne_v Ekspert
06. april 2004 - 15:00 #7
Hvis du laver en

SELECT COUNT(*) FROM table WHERE id=XX

finder den så det rigtige antal ?
Avatar billede sbjerre Nybegynder
06. april 2004 - 15:03 #8
ja
Avatar billede trer Nybegynder
06. april 2004 - 15:38 #9
Har du ændret transaction isolation level og cursor placering ifht standard ?
Avatar billede zedios Nybegynder
06. april 2004 - 15:46 #10
Hvis du afvikler din SP direkte fra Query Analyser går den så korrekt igennem eller er det samme problem?

Hvilken datatype har id?
Avatar billede sbjerre Nybegynder
12. april 2004 - 02:37 #11
Jeg har ikke prøvet at afvikle SP via Query Analyzer, men det vil jeg lige prøve når jeg kommer på arbejde igen. Datatypen er int
Avatar billede sbjerre Nybegynder
13. april 2004 - 09:57 #12
Nu har jeg prøvet at køre min SP via Query Analyser og der virker den som den skal => sletter ALLE rækker med pågældende id...
Hvad betyder det ?
Avatar billede trer Nybegynder
13. april 2004 - 10:17 #13
Det lyder som du har ændret på  nogle indstilninger i det connection objekt du benytter - hvad har du angivet som cursor type, transaction isolation level etc?
Avatar billede sbjerre Nybegynder
13. april 2004 - 12:47 #14
Jeg ved slet ikke noget om det du nævner, så jeg har svært ved at svare på det. Hvis du evt. forklarer hvordan jeg undersøger det kan jeg måske gøre det og vende tilbage. Det skal lige siges at jeg ikke har fuld adgang til den server hvorpå SQL serveren ligger... Jeg kun et brugernavn og password til den enkelte database jeg bruger og ingen terminal service adgang til Serveren.
Avatar billede zedios Nybegynder
13. april 2004 - 14:08 #15
Når det virker i Query analyser så lyder det som et problem i ADO .NET evt. pga CommandTimeout.

Normalt burde hele sletningen blive gennemført eller slettet, men du kan evt prøve at pakke din delete statement ind i en transaction for at se om det er her problemet ligger:

BEGIN TRANSACTION
DELETE FROM [Table] WHERE id = XX
COMMIT TRANSACTION

Alternativt kan du hæve dit CommandTimeout til mere end de default 30 sek.

Gøres fx. på følgende måde i VB .NET:

dim objConn as new SqlConnection(<connection string>)
dim objComm as new SqlCommand("DELETE FROM [Table] WHERE id = XX") 
'(her skal du udskifte XX med en parameter se .Net Framewok dokumentationewn
' for det ..)

objComm.CommandTimeout = 60 (sat til 60 sek. istedet for de default 30)

objConn.open
objComm.executeNonQuery

(lig evt. lidt error handling ind i form af try - catch for at fange evt. fejlmeddelelser ..)
Avatar billede zedios Nybegynder
13. april 2004 - 14:09 #16
Der skulle have stået:
"Normalt burde hele sletningen blive gennemført eller rullet tilbage." (implicit transaction) ..
Avatar billede sbjerre Nybegynder
14. april 2004 - 13:51 #17
Jeg prøver lige at se på det senere, men først vil jeg lige kommentere lidt...
Den med CommandTimeOut har jeg prøvet (i en anden sammenhæng). Da der ikke kastes en Connection Timeout exception tror jeg ikke det nytter, men at pakke SP ind i en transaction lyder som en god ide. Så den prøver jeg.

Tak for hjælpen so far.
Avatar billede sbjerre Nybegynder
14. april 2004 - 14:15 #18
Så er det også afprøvet, men uden held :(
Avatar billede zedios Nybegynder
14. april 2004 - 22:44 #19
Mærkeligt!

Prøv at køre en DBCC CHECKDB eller DBCC CHECKTABLE og se om der skulle være nogle fejl ..

Hvis det ikke er tilfældet har du så evt. mulighed for at reproducere fejlen med eksempel data som du kan poste herude - så vil vi bedre kunne hjælpe med at fejlfinde ..
Avatar billede Lars Søndergaard Nybegynder
28. april 2004 - 16:42 #20
Sørg for at du ikke har identity coulmns id's som er ens for så kan du ikke slette. Du har sikkert rodet med identity og fået nogen som er ens. Lav om til ikke-identity og reset alle rækker så der ikke er nogen som er ens. Herefter kan du slette
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester