UPDATE stejného sloupce stejného záznamu vícekrát v transakci   otázka

Databáze

Zdravím

Když chci udělat 2x stejný update v transakci např.

UPDATE SKz SET StavZ = (StavZ - @PozadovaneMnozstvi) OUTPUT INSERTED.StavZ WHERE (IDS = 5)

UPDATE SKz SET StavZ = (StavZ - @PozadovaneMnozstvi) OUTPUT INSERTED.StavZ WHERE (IDS = 5)

tak mi nahodí MSSQL zámek a timeout a nemůžu ho přinutit aby vykonal 2x stejnou operaci. Chápu, že mi dá SQL zámek na první UPDATE ale nemůžu přijít na to, jak to oběhnout. Nepomohla mi ani deklarace

BeginTransaction(IsolationLevel.ReadUncommitted). Zkoušel jsem i WITH (NOLOCK) v UPDATE ale nepomohlo.

Umí někdo poradit jak tenhle problém vyřešit, protože překopat celý skript vzhledem k jeho komplexnosti je dost nereálné.

Děkuji za každou radu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A jste si jistý, že ty update opravdu běží v jedné transakci? Není možné, že máte aktivní jinou transakci která drží zámky třeba v jiném vlákně? MSSQL v rámci transakce zámky sdílí. Můžete v rámci jedné transakce jeden a ten samý záznam upravit kolikrát chcete.

Zkusil bych SQL Profiler který vám napoví jaké dotazy běží v daném okamžiku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkusím to zanalazovat, můj UPDATE je v cyklu, kde je jenom jedna definice transakce a když jsem měl po sobě UPDATE ... WHERE (IDS = 4) a UPDATE ... WHERE (IDS = 5) tak vždy vše proběhlo hladce, proto mi to nejde do hlavy, ani error nenapíše. Ale když bylo 4,5,4 tak u druhé 4 vždy lock, timeout a konec.

Tak jako tak děkuji za názor a kdyby měl někdo další uvítám ho :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hlásí mi to zámek LCK_M_S

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chce to ukázku kódu...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bez příkladu kódu těžko radit. Ten SQL Profiler jste zkoušel, opravdu se navzájem blokuje jedna a ta samá transakce?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback