{"id":515,"date":"2008-05-27T09:35:22","date_gmt":"2008-05-27T08:35:22","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=515"},"modified":"2008-05-27T09:35:22","modified_gmt":"2008-05-27T08:35:22","slug":"sql-server-upsert-variaciok-3","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2008\/05\/27\/sql-server-upsert-variaciok-3\/","title":{"rendered":"SQL Server UPSERT vari\u00e1ci\u00f3k 3."},"content":{"rendered":"<p>El\u00e9gg\u00e9 sok teher van most rajtam, ez\u00e9rt nem iparkodok az upsert cuccokkal, de igyekszek utol\u00e9rni magam.<\/p>\n<p>A harmadik megold\u00e1s m\u00e1r kicsit ravaszabb, SQL Server 2005-\u00f6s utas\u00edt\u00e1sokat is tartalmaz:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\ncreate proc dbo.UpsertClient3\r\n  @id int,\r\n  @name nvarchar(100)\r\nas\r\nset xact_abort on\r\nbegin transaction\r\n\r\nupdate dbo.Client set name = @name where id = @id\r\n \r\ninsert dbo.Client (id, name)\r\nselect * from (values (@id, @name)) t(id, name)\r\nexcept\r\nselect * from dbo.Client as t2 with (updlock, serializable)\r\n\r\ncommit\r\ngo\r\n<\/pre>\n<p>Az except \u00e9s az intercept halmazm\u0171veletek j\u00f3l j\u00f6nnek, hogy az update \u00e9s az insert csak a sz\u00e1m\u00e1ra sz\u00fcks\u00e9ges adatokat kapja meg. Az update-n\u00e9l nem haszn\u00e1ltam, hisz ha egy sor nincs benne a t\u00e1bl\u00e1ban \u00fagyse lehet meg update-elni. Az intercept-tel el\u0151 lehetett volna sz\u0171rni az adatokat, de minek?<br \/>\nAz insert eset\u00e9n viszont m\u00e1r nem vag\u00e1nykodhatunk, ki kell venni a bemeneti halmazb\u00f3l a m\u00e1r c\u00e9lt\u00e1bl\u00e1ban bennl\u00e9v\u0151 sorokat. (Most, hogy ezt \u00edrom eszembe jutott, hogy lehet, hogy ezt is ki lehet spr\u00f3rolni, ha az IGNORE_DUP_KEY be van \u00e1ll\u00edtva a kulcs oszlopra. De valahogy rossz \u00e9rz\u00e9sem van ezzel kapcsolatban.)<\/p>\n<p>A p\u00e9lda az el\u0151z\u0151 kett\u0151vel ellent\u00e9tben m\u00e1r nem csak 1 bementi sort k\u00e9pes lekezelni, hanem egy tetsz\u0151leges sz\u00e1m\u00fa bementi halmazt is. <a href=\"http:\/\/soci.hu\/blog\/index.php\/2007\/12\/07\/sql-server-2008-ujdonsagok-1-tabla-tipusu-parameterek\/\">T\u00e1bla t\u00edpus\u00fa param\u00e9terekkel<\/a> kiv\u00e1l\u00f3an egy\u00fcttm\u0171k\u00f6dhet.<br \/>\nA megold\u00e1s sebess\u00e9ge kb. az el\u0151z\u0151 kett\u0151 szintj\u00e9n van, de ezt ut\u00f3bbi t\u00f6bbsor-lekezel\u00e9si lehet\u0151s\u00e9g miatt \u00e9rdemes megfontolni.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El\u00e9gg\u00e9 sok teher van most rajtam, ez\u00e9rt nem iparkodok az upsert cuccokkal, de igyekszek utol\u00e9rni magam. A harmadik megold\u00e1s m\u00e1r kicsit ravaszabb,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30,21,58],"tags":[],"class_list":["post-515","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2005","category-sql-server-2008"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":0,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}