Aggiorno una riga di una tabella, usando WITH (ROWLOCK), ma eseguendo "sp_lock" posso vedere che l'intera tabella è bloccato. Pertanto, prima che la transazione venga eseguita, altre transazioni non possono aggiornare le altre righe della tabella. perché "WITH (ROWLOCK)" non ha effetto?perché l'intera tabella è bloccata mentre "con (rowlock)" è usato in una dichiarazione di aggiornamento
Sto usando la query di seguito con scalmo:
DELETE FROM DefDatabaseSession WITH (ROWLOCK) WHERE ProcessName='test';
nel contempo da qualsiasi altra operazione che esegue la stessa operazione di eliminazione per la riga differenza nella stessa tabella io sono sempre l'eccezione
[ Driver JDBC SQLServer] [SQLServer] Periodo di timeout della richiesta di blocco superato .; l'eccezione nidificata è java.sql.SQLException: [newscale] [Driver JDBC SQLServer] [SQLServer] Periodo di timeout della richiesta di blocco superato: com.newscale.bfw.udkernel.kernel.UdKernelException: udconfig.defdbsession.delete; SQLException non categorizzato per SQL [DELETE FROM DefDatabaseSession WHERE ProcessName =?]; Stato SQL [HY000]; codice di errore [1222]; [newscale] [Driver JDBC SQLServer] [SQLServer] Periodo di timeout della richiesta di blocco superato .; l'eccezione nidificata è java.sql.SQLException: [newscale] [Driver JDBC SQLServer] [SQLServer] Periodo di timeout della richiesta di blocco superato.
'EXPLAIN' non significa esiste in SQL Server. Utilizza il pulsante "includi piano di esecuzione effettivo" per ottenere il piano. – Alejandro
Ho un indice per la colonna ProcessName. – vani
ma ho bisogno del blocco di riga solo ... perché ci sono altre righe che la cancellazione avverrà nello stesso momento da altri thread .. quindi ho bisogno di perdere solo i miei roes non tutti..so non posso usare il lock da tavolo – vani