{"id":35,"date":"2008-08-19T12:07:14","date_gmt":"2008-08-19T10:07:14","guid":{"rendered":"http:\/\/dev.flauschig.ch\/wordpress\/?p=35"},"modified":"2009-08-21T09:01:10","modified_gmt":"2009-08-21T07:01:10","slug":"withreadpast","status":"publish","type":"post","link":"http:\/\/dev.flauschig.ch\/wordpress\/?p=35","title":{"rendered":"WITH(READPAST)"},"content":{"rendered":"<p>Manchmal m\u00f6chte man ein nicht-blockierendes <code>SELECT<\/code> auf einer Tabelle machen. Dazu verwendet man einfach:<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: false; wrap-lines: false; notranslate\" title=\"\">\r\nSELECT * FROM MyTable WITH(NOLOCK)\r\n<\/pre>\n<p>Das Problem an <code>NOLOCK<\/code> ist, dass es ein &#8220;dirty&#8221; Read ist. Also wenn z.B. eine Transaktion ein <code>INSERT<\/code> auf diese Tabelle macht aber noch nicht commited ist, gibt das <code>SELECT<\/code> mit <code>NOLOCK<\/code> diese Row bereits zur\u00fcck! Wenn und die Transaktion zur\u00fcckgesetzt wird (Rollback), wird dieser Row wieder gel\u00f6scht und unser <code>SELECT<\/code> hat einen nicht mehr exisiterenden Eintrag.<br \/>\nUm dieses Problem zu umgehen kann man statt <code>NOLOCK<\/code> einfach <code>READPAST<\/code> verwenden. Das Statement sieht dann so aus:<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: false; wrap-lines: false; notranslate\" title=\"\">\r\nSELECT * FROM MyTable WITH(READPAST)\r\n<\/pre>\n<p>Nun werden Zeilen die gesperrt sind einfach ignoriert. Dies beinhaltet allerdings auch Zeilen die \u00fcber ein <code>UPDATE<\/code> gesperrt sind! Also immer aufpassen und absch\u00e4tzen, was man braucht.<\/p>\n<p>Weitere Links:<br \/>\n&#8211; <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms187373.aspx\">Table Hints (Transact-SQL)<\/a><br \/>\n&#8211; <a href=\"http:\/\/articles.techrepublic.com.com\/5100-10878_11-6185492.html\">Using NOLOCK and READPAST table hints in SQL Server<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal m\u00f6chte man ein nicht-blockierendes SELECT auf einer Tabelle machen. Dazu verwendet man einfach: SELECT * FROM MyTable WITH(NOLOCK) Das Problem an NOLOCK ist, dass es ein &#8220;dirty&#8221; Read ist. Also wenn z.B. eine Transaktion ein INSERT auf diese Tabelle macht aber noch nicht commited ist, gibt das SELECT mit NOLOCK diese Row bereits zur\u00fcck! &hellip; <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3,12],"tags":[54],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-roemer","4":"post-35","6":"format-standard","7":"category-programming","8":"category-sql","9":"post_tag-non-blocking"},"acf":[],"views":2153,"_links":{"self":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/35"}],"collection":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=35"}],"version-history":[{"count":0,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions"}],"wp:attachment":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}