<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6111056746116436593</id><updated>2024-12-30T01:17:59.547+03:00</updated><category term="sql server"/><category term="SQL Server 2008"/><category term="TRANSACTION"/><category term="Data Warehouse"/><category term="Kimball"/><category term="constraint"/><category term="sql"/><category term="Business Intelligence"/><category term="insert"/><category term="t-sql"/><category term="Backup"/><category term="DBCC"/><category term="Dimension"/><category term="Google Docs"/><category term="Identity"/><category term="NewID"/><category term="Performance"/><category term="RDBMS"/><category term="Trigger"/><category term="Veri ambarı"/><category term="date"/><category term="random"/><category term="rastgele"/><category term="tablo"/><category term="öneri"/><category term="Amazon"/><category term="Anket"/><category term="Book"/><category term="CDC"/><category term="Copy Only"/><category term="Data Mart"/><category term="Data Warehouse Toolkit"/><category term="DocVerse"/><category term="ETL"/><category term="Excel"/><category term="Fact"/><category term="Fact Table"/><category term="Fibonacci"/><category term="Forms"/><category term="Free"/><category term="INPUTBUFFER"/><category term="ISOLATION"/><category term="Icon"/><category term="Inmon"/><category term="Kitap"/><category term="Kolay"/><category term="LOCK"/><category term="LOG"/><category term="Mary Breslin"/><category term="New Feature"/><category term="Normalization"/><category term="OLAP"/><category term="OUTPUT"/><category term="Resource Governance"/><category term="SPARSE"/><category term="Seri"/><category term="Snowflake schema"/><category term="TDE"/><category term="The Data Warehouse Toolkit"/><category term="Top"/><category term="Unique"/><category term="assembly"/><category term="bigint"/><category term="boyut"/><category term="catch"/><category term="check"/><category term="child"/><category term="clr"/><category term="computed"/><category term="convert"/><category term="data"/><category term="database"/><category term="database_principle"/><category term="datetime"/><category term="dbrole"/><category term="debug"/><category term="deterministic"/><category term="disable trigger"/><category term="distributed"/><category term="dmv"/><category term="download"/><category term="enable trigger"/><category term="error"/><category term="format"/><category term="function"/><category term="graphic"/><category term="gün"/><category term="http endpoint"/><category term="import"/><category term="index"/><category term="iş zekası"/><category term="member_principle"/><category term="object"/><category term="okuma"/><category term="over"/><category term="parent"/><category term="partioning"/><category term="permission set"/><category term="persisted"/><category term="primary key"/><category term="principle"/><category term="random date"/><category term="rastgele tarih"/><category term="relation"/><category term="rename"/><category term="role"/><category term="sp_MSforeachtable"/><category term="sp_rename"/><category term="sp_spaceused"/><category term="star schema"/><category term="stored procedure"/><category term="stuff"/><category term="sys.objects"/><category term="system role"/><category term="süre"/><category term="tarih"/><category term="timer"/><category term="transpose"/><category term="try"/><category term="user"/><category term="veri"/><category term="view"/><category term="web"/><category term="web service"/><category term="window function"/><category term="xml"/><category term="zaman"/><category term="Ücretsiz"/><category term="çalışma"/><category term="örnek"/><title type='text'>Programlama Notları</title><subtitle type='html'>Birsen Tunç Yazar&#39;dan programlama / sql / web ile ilgili notlar, işinizi kolaylaştıracak minik ipuçları..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-5149232317531168806</id><published>2019-01-10T11:28:00.000+03:00</published><updated>2019-01-10T11:28:26.713+03:00</updated><title type='text'>Knime Eğitim Videoları</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
İleri analitikler konusunda ücretsiz bir platform olan, istatistiki modeller, etl, veri görselleştirme konusunda çeşitli çözümler sağlayan Knime, 2018 yılında,&amp;nbsp; Gartner&amp;nbsp; Magic Quadrant da, liderler kategorisine ulaşarak etkinliğini kanıtlamış bir araç.&amp;nbsp; &amp;nbsp;Masaüstü versiyonu ücretsiz sunulan Knime ile ileri analitik uygulamalarınızı sürükle bırak özelliği ile yapmanız mümkün.&lt;br /&gt;
&lt;br /&gt;
Knime ile ilgili eğitim videolarına, inteley danışmanlık youtube kanalından ulaşabilirsiniz.&lt;br /&gt;
Kanaldaki videolara ulaşmak için lütfen &lt;a href=&quot;https://www.youtube.com/channel/UCPkZ5Tb-zgpM8Ye-Vf2QP_A&quot;&gt;tıklayınız&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/5149232317531168806/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/5149232317531168806' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5149232317531168806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5149232317531168806'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2019/01/knime-egitim-videolar.html' title='Knime Eğitim Videoları'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-3410275404409625636</id><published>2019-01-10T11:21:00.000+03:00</published><updated>2019-01-10T11:21:46.145+03:00</updated><title type='text'>SAP BODS ile SOAP Web Servisleri Çağırma</title><content type='html'>&lt;br /&gt;
SAP BODS (Business Objects Data Services) ile nasıl web servis çağrısı yapılır, web servislere nasıl parametre geçilir konusundaki yazıma &lt;a href=&quot;https://www.inteley.com.tr/blog/sap-bods-ile-soap-web-servisi-%C3%A7a%C4%9F%C4%B1rma&quot;&gt;buraya &lt;/a&gt;tıklayarak ulaşabilirsiniz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/3410275404409625636/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/3410275404409625636' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/3410275404409625636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/3410275404409625636'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2019/01/sap-bods-ile-soap-web-servisleri-cagrma.html' title='SAP BODS ile SOAP Web Servisleri Çağırma'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-1649554219120634737</id><published>2019-01-10T11:19:00.002+03:00</published><updated>2019-01-10T11:19:20.928+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="over"/><category scheme="http://www.blogger.com/atom/ns#" term="sql"/><category scheme="http://www.blogger.com/atom/ns#" term="t-sql"/><category scheme="http://www.blogger.com/atom/ns#" term="window function"/><title type='text'>SQL Server da Window Fonksiyonların Kullanımı</title><content type='html'>SQL Server da&amp;nbsp; daha hızlı ve anlaşılır hesaplama yapmak için window function ların nasıl kullanıldığına dair yazıma&amp;nbsp; &lt;a href=&quot;https://www.inteley.com.tr/blog/t-sql-ile-daha-performansl%C4%B1-ve-anla%C5%9F%C4%B1l%C4%B1r-hesaplamalar-yap%C4%B1n-1&quot;&gt;buraya &lt;/a&gt;tıklayarak ulaşabilirsiniz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/1649554219120634737/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/1649554219120634737' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1649554219120634737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1649554219120634737'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2019/01/sql-server-da-window-fonksiyonlarn.html' title='SQL Server da Window Fonksiyonların Kullanımı'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-7048433821132804220</id><published>2010-11-04T20:45:00.001+02:00</published><updated>2010-11-04T20:46:10.524+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dmv"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>SQL Server Performansı için faydalı DMV(Dynamic Management View) ler</title><content type='html'>Performans sıkıntısı oluşan sorguları bulmak ve SQL Server&#39;ın performansını arttırmak&amp;nbsp; için DMV lerden faydanılabilir. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_exec_requests, sys.dm_exec_sessions&lt;/b&gt; : Her iki view de server&#39;da şu an çalışan istekleri getirir. Anlık olarak, uzun süren ve düşük performans gösteren sorguları bulmak için kullanılabilir.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_exec_query_stats&lt;/b&gt; : Çalışan sorguların cache planlarını getirir. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_exec_sql_text&lt;/b&gt; En kötü performanslı sorguyu tespit ettiğinizde, bu view i kullanarak sorgunun tam metnine ulaşabilirsiniz. DBCC INPUTBUFFER a benzer ve&amp;nbsp; query handle parametresi alır. Query handle a&amp;nbsp; sys.dm_exec_requests ve sys.dm_exec_query_stats view lerinde ulaşılabilir.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_os_wait_stats&lt;/b&gt; Server bazında bekleme istatistiklerini getirir ve dar boğazları tepit etmek için kullanılabilir.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_db_index_usage_stats&lt;/b&gt;&amp;nbsp; Her bir indeksin kullanım istatistiklerini gösterir. Kullanılmayan ve az kullanılan indeksleri bulmak için kullanılabilir. Kullanılmayan indeklerin kaldırılması, veri güncelleme performansını arttırır, disk kullanımını azaltır. &lt;br /&gt;
&lt;br /&gt;
DMV ler, SQL server&#39;ın son açılışından itibaren olan istatistikleri gösterir. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sys.dm_db_missing_index_details&lt;/b&gt;&amp;nbsp; Yeni indeks ihtiyacını tespit etmek için kullanılır.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/7048433821132804220/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/7048433821132804220' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/7048433821132804220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/7048433821132804220'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/11/sql-server-performans-icin-faydal.html' title='SQL Server Performansı için faydalı DMV(Dynamic Management View) ler'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-3051857924859425196</id><published>2010-10-31T13:32:00.001+02:00</published><updated>2010-10-31T15:08:05.950+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="partioning"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>Partitioning Nedir?</title><content type='html'>SQL Server&#39;da partitioning yapısını, bir kitapevinde, birbirleriyle ilgili kitapları aynı raflara, ilgili olmayan kitapları farklı raflara koymaya benzetebiliriz. Romanlar bir rafa, Bilgisayar kitapları başka bir rafa gibi.&lt;br /&gt;
&lt;br /&gt;
Çok büyük bir tablomuz varsa, tablolarımızı bazı özelliklerine farklı partitionlara bölebilir ve performansımızı arttırabilir ve tablonun yönetemini kolaylaştırabiliriz. Örneğin bir satış tablosunu düşünün. Üzerinde binlerce kayıt olabilir. Ancak en çok bu yılın kayıtlarına bakar, diğer kayıtları daha az sorgularız. Sorgularımızda sql server&#39;ın bir tablonun tüm kayıtlarını aramak yerine sadece daha az sayfayı taramasını, tabloyu bölerek sağlayabiliriz.&amp;nbsp; Hatta eski kayıtlar ve yeni kayıtlar için farklı zamanlarda backup alabiliriz. Satırlara göre farklı bölümlere ayırmaya horizontal partitioning denir. &lt;br /&gt;
&lt;br /&gt;
Eğer bir tablo üzerinde çok sık kullandığımız kolonların yanında çok ender sorguladığımız kolonlar varsa, tabloyu kolonlara göre de bölümlere ayırabiliriz. Buna da vertical partioning denir. Bir tabloyu satırlardan ve sütünlardan oluşan bir yapı olarak düşünürsek, bu durumda tabloyu dikey olarak bölmüş oluruz. Vertical partioning ismi de buradan gelir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/3051857924859425196/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/3051857924859425196' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/3051857924859425196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/3051857924859425196'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/partitioning-nedir.html' title='Partitioning Nedir?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6010859577631920925</id><published>2010-10-31T13:13:00.000+02:00</published><updated>2010-10-31T13:13:39.606+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="index"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>SQL Server da Index Türleri</title><content type='html'>Index, SQL Server tablolarındaki verilere kolayca ulaşmamızı sağlayan yapılardır. Bir kitabın sonundaki indekse benzetilebilir. Hangi verinin nerede bulunduğu indeksler üzerinde tutulur.&lt;br /&gt;
&lt;br /&gt;
Temel olarak SQL Server&#39;da iki tür indeks vardır.&lt;br /&gt;
&lt;br /&gt;
Clustered Index ve Nonclustered Indeks. Clustered Index, tablonun aynısıdır ve tablodaki tüm alanlar yer alır, sadece veriler, clustered indeks olarak tanımlanmış alanların sırasında tutulur, ancak nonclustered index&#39;de sadece indeksteki veriler ve o verilerin nerede bulunduğuna dair işaretler tutulur. &lt;br /&gt;
&lt;br /&gt;
Üzerinde clustered indeks tanımlı olmayan tabloya heap tablo denir. Ve heap tablolarda veriler sıralı değildir. Üzerinde clustered indeks tanımlı olan bir tablonun iki versiyonu olur, heap orijinal tablodur ve bu tablonun sıralı hali de clustered indekste durur.&amp;nbsp; Özel birşey söylenmezse, primary key yaratılırken, primary key alanına göre clustered indeks yaratılır. Bir tablo için sadece 1 tane clustered indeks yaratılabilir. &lt;br /&gt;
&lt;br /&gt;
Bu genel ayrımdan sonra içeriklerine göre indeksler aşağıdaki şekilde gruplandırılabilir. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Simple&lt;/b&gt;&lt;br /&gt;
Tek kolondan oluşan bir indekstir. Örneğin sadece ad kolonundan oluşan veya ad ve soyad birleşiminden oluşur. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Compound&lt;/b&gt;&lt;br /&gt;
2 veya daha fazla kolondan oluşan indekstir.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Unique&lt;/b&gt; &lt;br /&gt;
Unique indeks olarak tanımlı alanlar için, aynı verilerden sadece bir tane girilmesine izin veren indeks türüdür.&amp;nbsp;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6010859577631920925/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6010859577631920925' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6010859577631920925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6010859577631920925'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/sql-server-da-index-turleri.html' title='SQL Server da Index Türleri'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-1110745849994545947</id><published>2010-10-29T20:17:00.000+03:00</published><updated>2010-10-29T20:17:08.732+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="insert"/><category scheme="http://www.blogger.com/atom/ns#" term="OUTPUT"/><category scheme="http://www.blogger.com/atom/ns#" term="tablo"/><title type='text'>OUTPUT INTO</title><content type='html'>OUTPUT INTO ile, UPDATE,INSERT,DELETE ve MERGE işlemleri sırasında etkilenen verileri bir tabloya kopyalayabiliriz.&amp;nbsp; Log almak, son değişiklik yapılan verilen ile ilgili işlem yapmak için iyi bir yöntemdir. &lt;br /&gt;
&lt;br /&gt;
UPDATE Production.Product&lt;br /&gt;
SET Color = &#39;blue&#39;&lt;br /&gt;
OUTPUT inserted.ProductID,&lt;br /&gt;
inserted.Name,&lt;br /&gt;
inserted.Color,&lt;br /&gt;
deleted.Color&lt;br /&gt;
&lt;br /&gt;
INTO ProductLog&lt;br /&gt;
WHERE ProductID= 134&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
inserted ve deleted sanal tabloları, trigger lardan bildiğimiz tabloların aynısıdır. Yeni değerler inserted tablosunda, eski değerler deleted tablosunda bulunur. &lt;br /&gt;
&lt;br /&gt;
INTO da verilen tablonun yapısı, OUTPUT da getirilen kolonlarla aynı yapıda olmalıdır. &lt;br /&gt;
&lt;br /&gt;
OUTPUT INTO da kullanılamayacak ifadeler&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Başka bir veri tabanından olan bir tablo&lt;/li&gt;
&lt;li&gt;View&lt;/li&gt;
&lt;li&gt;CTE (Common Table Expression)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Üzerine trigger yazılmış bir tablo&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Foreign key constraint i tanımlı bir tablo &lt;/li&gt;
&lt;li&gt;Merge veya Transaction replicationda yer alan bir tablo.&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;Asıl amaç, output into sırasında oluşacak bir hatayı engellemektir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/1110745849994545947/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/1110745849994545947' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1110745849994545947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1110745849994545947'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/output-into.html' title='OUTPUT INTO'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-966722528566060998</id><published>2010-10-29T20:04:00.000+03:00</published><updated>2010-10-29T20:04:17.527+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DBCC"/><category scheme="http://www.blogger.com/atom/ns#" term="Identity"/><title type='text'>DBCC CHECKIDENT</title><content type='html'>&amp;nbsp;DBCC CHECKIDENT (table_name, NORESEED | RESEED, [new_reseed_value])&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;DBCC CHECKIDENT (&#39;myTableName&#39;,NORESEED)&amp;nbsp; şeklinde çalıştırılsa, ilgili tablonun&amp;nbsp; mevcut ve en yüksek identity değerini getirir.&amp;nbsp;&amp;nbsp; Eğer hatalı insert nedeniyle identity alanının değeri artmış, ancak tabloya yazılmamışsa bu tarz durumlar olabilir. Bu durumda DBCC CHECKIDENT, reseed parametresi ile çağrılarak, identity alanı istenilen değere geri çekilebilir. &lt;br /&gt;
&lt;br /&gt;
DBCC CHECKIDENT (&#39;myTableName&#39;,RESEED, 50)&amp;nbsp;&amp;nbsp; ile identity değeri 50 ye alınır, bundan sonra oluşacak identity değerleri 51 den başlar.&lt;br /&gt;
&lt;br /&gt;
DBCC CHECKIDENT (&#39;myTableName&#39;,RESEED) ise mevcut identity değerini maximum identity değeri ile eşitler.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
İçinde identity alanı olan bir tablonun içindeki tüm kayıtları sildiğinizde identity alanı sıfırlanmaz. Sıfırlanması için truncate table kullanabilirsiniz ancak tablo üzerinde foreign key ler tanımlı ise, truncate table kodu çalışmaz. Bu durumda tablodaki kayıtları sildikten sonra reseed ile identity alanını baştan başlatabilirsiniz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/966722528566060998/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/966722528566060998' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/966722528566060998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/966722528566060998'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/dbcc-checkident.html' title='DBCC CHECKIDENT'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-9055771895762024578</id><published>2010-10-29T19:44:00.001+03:00</published><updated>2010-10-29T19:51:45.732+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Identity"/><category scheme="http://www.blogger.com/atom/ns#" term="insert"/><category scheme="http://www.blogger.com/atom/ns#" term="Trigger"/><title type='text'>Son eklenen kayıtda oluşan otomatik sayıyı öğrenmek</title><content type='html'>&amp;nbsp;CREATE TABLE Table1(ID int identity(1,1), Name nvarchar(50)) &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;INSERT INTO @Table1(Name) VALUES(&#39;Test&#39;) &lt;br /&gt;
&lt;br /&gt;
SELECT @@IDENTITY , SCOPE_IDENTITY(), IDENT_CURRENT(&#39;Table1&#39;) &lt;br /&gt;
&lt;br /&gt;
Identity tanımlanmış bir alanı olan bir tabloya kayıt eklediğimizde, en son eklediğimiz kayıt ile birlikte oluşan Identity alanının değerini öğrenmek ihtiyacımız olduğunda 3 farklı yöntem kullanabiliriz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;@@IDENTITY&lt;/b&gt; : Son oturumda oluşan son identity numarasını döndürür. Eğer bu tablo üzerinde bir trigger olsaydı ve trigger da üzerinde identity olan bir tabloya kayıt ekliyor olsaydı, @@Identity bize, Table1 tablosuna eklediğimiz kaydın identity değerini değil, trigger da kayıt eklenen tablonun identity değerini getirecekti.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SCOPE_IDENTITY&amp;nbsp;&lt;/b&gt; : Adından anlaşılacağı üzere,&amp;nbsp; scope_identity fonksiyonu, mevcut oturumda ve mevcut kapsamda (scope) son oluşan identity değerini döndürür.&amp;nbsp; Table1 üzerinde trigger olsa, ve başka bir identity alanı olan bir tabloya insert yapılsa bile, Table1 ile ilgili iş yaptığımız için, Table1 üzerinde oluşan son identity değerini bize verecektir.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IDENT_CURRENT&lt;/b&gt; : Bu fonksiyon ise hem oturumdan, hem de kapsamdan bağımsız çalışır. Bu nedenle bir tablo adı parametresi ister. Verilen tabloda oluşmuş son identity değerini getirir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/9055771895762024578/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/9055771895762024578' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/9055771895762024578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/9055771895762024578'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/son-eklenen-kaytda-olusan-otomatik-sayy.html' title='Son eklenen kayıtda oluşan otomatik sayıyı öğrenmek'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6403254248439146101</id><published>2010-10-29T16:33:00.000+03:00</published><updated>2010-10-29T16:33:05.042+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LOCK"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>LOCK Türleri</title><content type='html'>Veritabanında satır, sayfa veya tablo düzeyinde locklar oluşabilir. Bu locklar iki gruba ayrılırlar. &lt;br /&gt;
Basic Locks : &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;S:Shared&lt;/li&gt;
&lt;li&gt;U:Update&lt;/li&gt;
&lt;li&gt;X:Exclusive&lt;/li&gt;
&lt;/ul&gt;Extended Locks:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;I : Intent&lt;/li&gt;
&lt;li&gt;Sch: Schema&lt;/li&gt;
&lt;li&gt;BU: Bulk Update&lt;/li&gt;
&lt;li&gt;KR : Key Range &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Shared Lock&lt;/b&gt; : Bir tablo üzerinde select sorgusu çalışırken oluşur. Bu lock, okuma yapacak diğer sorguların çalışmasına izin verir. Ancak shared lock çözülene kadar hiç bir transaction okunan kayıtları güncelleyemez. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update lock&lt;/b&gt; : Bir tablo üzerinde update&amp;nbsp; işleri yapılırken oluşur. SQL Server, güncellenen verileri okumaya kalktığında kullanılır. Güncelleme sırasında, update lock, exclusive lock a dönüşür.&amp;nbsp; Exclusive lock, birden fazla transaction ın aynı satırları güncellemeye çalışıp, deadlock oluşturmasını engeller. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Exclusive lock&lt;/b&gt; :&amp;nbsp;&amp;nbsp; Diğer işlemlerin kilitlenmiş kaynaklara ulaşmasını engeller. Okuma işlemi sırasında, tabloda NOLOCK kullanıldıysa veya Isolation Level,&amp;nbsp; READ UNCOMMITTED&amp;nbsp; olarak ayarlandıysa, exclusive lock konulmuş olsa da veri okunur. Ancak diğer işlemler, exclusive lock kalkana kadar yapılamaz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Intent Lock&lt;/b&gt; : 6 farklı türde intent lock vardır.&amp;nbsp;&lt;br /&gt;
&lt;i&gt;Intent shared (IS) lock&lt;/i&gt; istekleri veya shared lock ları korur. Bir kayıtda bir shared lock oluşmuş ise, ilgili kaydın bulunduğu page üzerinde intent shared lock oluşur. &lt;br /&gt;
&lt;i&gt;Intent exclusive (IX) lock&lt;/i&gt; Intent shared lock ın bir üstü seviyesidir. Bir kayıtda exclusive lock varsa, ilgili kaydın bulunduğu page üzerinde Intent Exclusive Lock konulur.&lt;br /&gt;
&lt;i&gt;Shared with intent exclusive (SIX) lock &lt;/i&gt;kilitleme hiyerarşisinde daha alt seviyede duran shared lock ları korur. Bir tabloda shared with intent exclusive lock oluşursa, değişiklik yapılan page üzerinde intent exclusive lock da yer alır.&lt;br /&gt;
&lt;i&gt;Intent update (IU) lock&lt;/i&gt;&amp;nbsp; güncellenen tablonun bulunduğu pagelerdeki, shared ve istenilelen diğer lockları korur.&lt;br /&gt;
&lt;i&gt;Shared intent update lock,&lt;/i&gt;&amp;nbsp; shared ve intent update locklarının birleşimininden oluşur. Bir transaction bir tablodan okuma yaptığında shared lock oluşur, daha sonra aynı transaction bir update işlemi yaparsa o zaman shared intent update lock a dönüşür. Bir tabloda select cümlesi çalıştırılırken, PAGLOCK hint i kullanılarak çekildiğinde de oluşan lock türüdür. &lt;br /&gt;
&lt;br /&gt;
Birbirini kapsayan birden fazla lock olmasının nedeni, SQL Server&#39;ın aynı anda bir tablo üzerinde oluşan birçok lock yerine, tek bir lock ile çalışmasının daha verimli olmasındandır.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6403254248439146101/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6403254248439146101' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6403254248439146101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6403254248439146101'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/lock-turleri.html' title='LOCK Türleri'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6207406594390009623</id><published>2010-10-29T15:05:00.001+03:00</published><updated>2010-10-29T15:06:21.766+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="catch"/><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><category scheme="http://www.blogger.com/atom/ns#" term="try"/><title type='text'>TRY - CATCH ve TRANSACTION kullanımı</title><content type='html'>Try Catch yapısını, transactionlar ile kullanmak hem yapılan kontrol sayısını azaltır, hem de daha anlaşılır bir kod yazmanızı sağlar.&lt;br /&gt;
&lt;br /&gt;
Try Catch kullanılmazsa (SQL 2005 öncesi versiyonlarda zaten try catch olmadığı için mecburan) her bir statementdan sonra @@Error den gelen hata kodunu bir değişkene atmanız, bir sorun varsa rollback yoksa kodun devam etmesi veya commit etmesi için if cümleleri ile uğraşmanız gerekir.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
TRY/CATCH ile hataları yönetmek ve transactionlar ile çalışmak daha da kolaylaştı. &lt;br /&gt;
İşte birkaç örnek. &lt;br /&gt;
&lt;br /&gt;
DECLARE @ErrorNumber int = 0 , @ErrorMessage nvarchar(max)&lt;br /&gt;
&lt;br /&gt;
BEGIN TRANSACTION &lt;br /&gt;
BEGIN TRY&lt;br /&gt;
…&lt;br /&gt;
END TRY&lt;br /&gt;
BEGIN CATCH&lt;br /&gt;
&lt;br /&gt;
SELECT @ErrorNumber = ERROR_NUMBER(), @ErrorMessage = ERROR_MESSAGE()&lt;br /&gt;
END CATCH&lt;br /&gt;
&lt;br /&gt;
IF @ErrorNumber&amp;lt;&amp;gt;0 &lt;br /&gt;
ROLLBACK TRANSACTION &lt;br /&gt;
ELSE&lt;br /&gt;
COMMIT TRANSACTION &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DECLARE @ErrorNumber int = 0 , @ErrorMessage nvarchar(max)&lt;br /&gt;
&lt;br /&gt;
BEGIN TRANSACTION &lt;br /&gt;
BEGIN TRY&lt;br /&gt;
…&lt;br /&gt;
&amp;nbsp; COMMIT TRANSACTION &lt;br /&gt;
END TRY&lt;br /&gt;
BEGIN CATCH&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @ErrorNumber = ERROR_NUMBER(), @ErrorMessage = ERROR_MESSAGE()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @@TRANCount&amp;gt;0 ROLLBACK TRANSACTION &lt;br /&gt;
END CATCH&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6207406594390009623/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6207406594390009623' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6207406594390009623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6207406594390009623'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/try-catch-ve-transaction-kullanm.html' title='TRY - CATCH ve TRANSACTION kullanımı'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6872906405397078574</id><published>2010-10-29T14:52:00.001+03:00</published><updated>2010-10-29T14:53:53.635+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><title type='text'>İsimlendirilmiş Transactionlar</title><content type='html'>İsimlendirilmiş transactionlar, bir transactiona belli bir isim atanmış transactionlardır. İçiçe transactionlar ile çalışıldığında, hangi transactionın, ne durumda olduğunu bulabilirsiniz. Ayrıca lockları izlemek kolaylaşır, hangi transaction uzun süreli locklara neden olduğu tespit edilebilir.&lt;br /&gt;
&lt;br /&gt;
BEGIN TRANSACTION myTranName&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Transaction içinde çalışacak kodlar.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
COMMIT TRANSACTION myTranName&lt;br /&gt;
&lt;br /&gt;
şeklinde kullanılır.&lt;br /&gt;
&lt;br /&gt;
Transactiona verilen isim, SQL Server&#39;ın objelere isim verme kurallarına uygun olmalıdır ve 32 karakterden uzun olamaz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6872906405397078574/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6872906405397078574' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6872906405397078574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6872906405397078574'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/isimlendirilmis-transactionlar.html' title='İsimlendirilmiş Transactionlar'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-5129267789456256219</id><published>2010-10-29T14:29:00.000+03:00</published><updated>2010-10-29T14:29:00.539+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><title type='text'>TRANSACTION Türleri</title><content type='html'>SQL Server 2 tür transaction yapısını destekler.&lt;br /&gt;
Local Transaction : Aynı server üzerinde kalan transactionlardır. BEGIN TRANSACTION veya daha kısa yazımıyla BEGIN TRAN ifadesi ile başlatırlar.&lt;br /&gt;
&lt;br /&gt;
Distributed Transaction : BEGIN DISTRIBUTED TRANSACTION veya BEGIN DISTRIBUTED TRAN ifadesi ile başlatırlar. Bu tür transaction türleri, eğer bir transaction içerisinde server dışına çıkılacak ise kullanılır. Bu daha çok bir query, linked server ile başka bir servera bağlanıyorsa veya OPENROWSET kullanılıyorsa oluşur. Bu transactionlar sadece SQL Server için değil, distributed transaction yapısını destekleyen Oracle, DB2 gibi veri tabanlarına bağlanılıyorsa da kullanılabilir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/5129267789456256219/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/5129267789456256219' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5129267789456256219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5129267789456256219'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/transaction-turleri.html' title='TRANSACTION Türleri'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-2902656589874628039</id><published>2010-10-29T13:51:00.000+03:00</published><updated>2010-10-29T13:51:29.952+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><title type='text'>Transactionlar Hakkında Doğru Bilinen Yanlışlar</title><content type='html'>&amp;nbsp;&lt;i&gt;Eğer transaction içerisinde bir komut hata verirse, diğer komutların dataları da işlenmez.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;Eğer bir hata yakalama mekanizması kullanmadıysanız ve hata durumunda rollback yapmadıysanız, commit cümlesi çalıştığında sorun olmayan komutlar çalışır ve işlemlerini yaparlar. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Bir stored procedure zaten bir transaction dır.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
Bir prosedür içerisindeki her bir kod tek başına bir transaction dır.&amp;nbsp; Aslında bu stored procedure içinde olmasa da, tüm yazılan insert, update ve delete kodları otomatik commit edilen bir transaction olarak çalışırlar. Ancak stored procedure kodunun tümü tek bir transaction değildir.&amp;nbsp; Eğer bir stored procedure, tek bir transaction olarak çalıştırılmak isteniyorsa, Begin Transaction ve Commit Transaction bloğu içine yazılmalıdır.&amp;nbsp; Ancak unutmamak gerekir ki, transaction isolation levela göre bu tablolarda uzun süreli lock oluşmasına, bu arada diğer kullanıcıların hiç bir işlem yapamamasına neden olabilir. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Bir transaction yaratılırsa ve bu transaction içinde bir select ifadesi çalıştırılırsa, kimse select ile çekilen satırlara ulaşamaz.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;Bu transaction isolation level&#39;a göre doğru da olabilir, yanlış da. Bunun için Transaction Isolation Level ile ilgili yazıma bakabilirsiniz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/2902656589874628039/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/2902656589874628039' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/2902656589874628039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/2902656589874628039'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/transactionlar-hakknda-dogru-bilinen.html' title='Transactionlar Hakkında Doğru Bilinen Yanlışlar'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-2640000742719764847</id><published>2010-10-29T13:34:00.000+03:00</published><updated>2010-10-29T13:34:17.216+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><title type='text'>Transaction nedir?</title><content type='html'>Transaction, bir veri tabanına aynı anda işlenen (commit)&amp;nbsp; veya işlenmesi geri alınabilen (rollback) bir grup komuttur.&lt;br /&gt;
Transaction yapısı ile farklı tablolara kayıt ekleyebilir, güncelleme yapabilir veya kayıt silebiliriz ve bu işlemlerden herhangi birinde bir sorun olursa, tüm yapılan işlemleri geri alabiliriz.&lt;br /&gt;
Transaction sırasında, tablolar üzerinde olabilecek lock ları, transaction isolation level&#39;ını değiştirerek kontrol edebiliriz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/2640000742719764847/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/2640000742719764847' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/2640000742719764847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/2640000742719764847'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/transaction-nedir.html' title='Transaction nedir?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-1340002515317663830</id><published>2010-10-28T22:38:00.004+03:00</published><updated>2010-10-28T22:50:06.088+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="assembly"/><category scheme="http://www.blogger.com/atom/ns#" term="clr"/><category scheme="http://www.blogger.com/atom/ns#" term="permission set"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>ASSEMBLY Yaratmak ve Permission Set</title><content type='html'>Diyelim CLR ile SQL Server da çalışmak için bir assembly yazdınız ve bu assembly yi&amp;nbsp; register ediyorsunuz.&lt;br /&gt;
&lt;br /&gt;
CREATE ASSEMBLY MyCLRFunction&lt;br /&gt;
AUTHORIZATION [dbo]&lt;br /&gt;
FROM &#39;C:\MyCLRFunction.dll&#39;&lt;br /&gt;
WITH PERMISSION_SET = SAFE;&lt;br /&gt;
&lt;br /&gt;
Yukarıdaki örnekte göründüğü gibi, CREATE ASSEMBLY ile yazabildiğimiz parametrelerden&amp;nbsp; biri de PERMISSION_SET.&lt;br /&gt;
&lt;br /&gt;
Permission Set, SQL Server&#39;da oluşturduğumuz assembly için, hangi güvenlik kısıtılarının uygulanacanı belirlediğimiz yer.&amp;nbsp; Bu güvenlik kısıtları, tabii ki sadece bu assembly yi SQL Server da&amp;nbsp; kullanırken uygulanıyor olacak (Bir CLR fonksiyonun içinde örneğin)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;SQL Server 2008 de 3 farklı set var&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;SAFE&lt;/li&gt;
&lt;li&gt;EXTERNAL_ACCESS&lt;/li&gt;
&lt;li&gt;UNSAFE&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;SAFE&lt;/b&gt;: Safe en fazla kısıtlayıcı olan ve aynı zamanda CREATE ASSEMBLY ifadesinde permission set için bir şey yazılmazsa SQL Server&#39;ın kabul ettiği varsayılan değer. &lt;br /&gt;
Bu şekilde ayarlanmış bir assembly, network, dosya veya windows registry gibi dış kaynaklara ulaşamaz.&amp;nbsp; Hesaplama işleri veya kullanıcı tanımlı veri tipi için yazılmış bir assembly için en uygun ayardır. &lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
EXTERNAL_ACCESS&lt;/b&gt; seçeneği ile kayıt edilmiş olan assembly ler, dosya sistemine ulaşıp, değiştirebilirler, event log&#39;a, registry ye veya active directory ye ulaşabilirler, web veya smtp bağlantıları kurabilirler.&lt;br /&gt;
&amp;nbsp;Assembly şe dış kaynaklara ulaşırken, SQL Server service account u ile bu bağlantıyı kurarlar. Ayrıca unsafe olarak işaretlenmiş kodları da çalıştıramazlar. &lt;br /&gt;
&lt;br /&gt;
UNSAFE : EXTERNAL_ACCESS ile izin verilern her şeyi yapabilir. Aralarındaki tek fark, UNSAFE, unsafe olarak işaretlenmiş ve unmanaged kod denilen kodları da çalıştırabiliyor olmasıdır.&amp;nbsp;&amp;nbsp; Gerçekten gerekli olmadıkça, unmanaged bir kodu unsafe olarak sql server a tanıtmamak gerekir. Bu kodlar sql server&#39;ın hem güvenliğine, hem de çalışmasına zarar verebilirler. &lt;br /&gt;
&lt;br /&gt;
Assembly kodları, SQL Server servisi tarafından , SQL Server Service Account u ile çalıştırılırlar. Eğer SQL Server, Local System kullanıcısı gibi yetkileri kısıtlı bir kullanıcı ile çalıştırılıyorsa, network gibi yetkisi olmayan kaynaklara ulaşamaz.&amp;nbsp; Assembly kodu içerisinden, başka bir kullanıcı olarak çalıştırmaya izin vardır ancak burada da, windows un güvenlik kısıtları devreye girer.&lt;br /&gt;
CLR çağırırken, dışarıdaki bir kaynağa ulaşabilmek için, SQL Server&#39;a windows kullanıcısı ile bağlanmak gerekir. Windows login&#39;i ile giriş yapılmış olsa da, assembly tarafından giriş yapılan kullanıcının değil, sql server servisini çalıştıran kullanıcının yetkileri kullanılır.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;SQL Server 2008 veritabanlarının&amp;nbsp; TRUSTWORTHY özellikleri vardır. Bu özellik, veritabanı objelerinin (fonksiyonlar ve prosedürler gibi), dış kaynaklara ulaşıp ulaşamayacağını belirler. TRUSTWORTHY özelliği &amp;nbsp;ON ise CLR kullanan veritabanı nesneleri, sql server servis kullanıcısının yetkileri dahilinde dış kaynaklara ulaşabilir , eğer &quot;OFF&quot; ise, CLR nesneleri, dış bir kaynağa ulaşmaya çalışırsa, hata alırlar.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/1340002515317663830/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/1340002515317663830' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1340002515317663830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1340002515317663830'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/permission-set.html' title='ASSEMBLY Yaratmak ve Permission Set'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-20633954562416933</id><published>2010-10-26T10:37:00.000+03:00</published><updated>2010-10-26T10:37:41.621+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ISOLATION"/><category scheme="http://www.blogger.com/atom/ns#" term="TRANSACTION"/><title type='text'>Transaction Isolation Level lar nedir?</title><content type='html'>SQL Server&#39;da verilerimizi güncellerken, diğer transaction ların verilere nasıl ulaşacağı, lock ların nasıl ve na kadar süre tutulacağı, verilerin nasıl okunacağı&amp;nbsp; &quot;transaction isolation level&quot; ile karar verilir.&lt;br /&gt;
&lt;br /&gt;
Isolation için&amp;nbsp;&amp;nbsp; eş zamanlı olarak veri güncellemesi yapan transactionların etkilerinden, diğer transactionları koruma yeteneğidir diyebiliriz.&lt;br /&gt;
Her transaction, transaction tamamlanana kadar, güncellen veriyi kilitler.&amp;nbsp; Veri okuma işlemlerinde, &quot;transaction isolation levels&quot;, diğer transaction lar tarafından yapılan değişikliklerin etkilerinden koruma seviyeleridir. &lt;br /&gt;
&lt;br /&gt;
Daha düşük seviye bir isolation level seçilirse, aynı anda birçok kullanıcı veriyer ulaşabilir ancak okunan veriler tutarlı veya güncel olmayabilir. &lt;br /&gt;
Yüksek seviye bir isolation level, okunan verinin tutarlılığını arttırken, bir transaction&#39;ın başka transaction ları kilitlemesine neden olabilir.&lt;br /&gt;
Veri tutarlılığının üç temel yan etkisi vardır.&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;b&gt;dirty read&lt;/b&gt; :&amp;nbsp; Bir transaction tarafından bir veri güncellenirken verinin okunmasıdır ve veri güncel olmayabilir&lt;br /&gt;
&amp;nbsp; &lt;b&gt;nonrepeatable read&lt;/b&gt;: Bir başka transaction, aynı satırı birçok kez okur ve her seferinde başka bir veri okursa oluşur.&lt;br /&gt;
&amp;nbsp; &lt;b&gt;phantom read&lt;/b&gt; : Bir silme veya yeni kayıt ekleme işlemi sırasında, aynı anda okuma işlemi yapılıyorsa ve bu kayıtlar da okunan kayıt setinin içerisindeyse oluşur.&amp;nbsp; Bu kullanıcının kayıtları eklemediğini düşünmesine ve ikince kez kayıt eklemeye çalışmasına neden olabilir. &lt;br /&gt;
&lt;br /&gt;
En üst seviye isolation &quot;SERIALIZABLE&quot; dır. Tüm transaction her zaman aynı datayı alırlar ancak çok kullanıcılı sistemlerde, bir kullanıcının yaptığı işlem, diğer kullanıcıların işlemlerini etkiler.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
En alt seviye isolation ise &quot;READ UNCOMMITTED&quot; dır.&amp;nbsp; Diğer transactionlar tarafından güncellenmeye başlamış, ancak henüz commit işlemi tamamlanmamış veriler okunabilir. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;READ UNCOMMITTED &lt;/b&gt;Başka transactionlardan tarafından güncellenmekte olan, ancak henüz güncelleme işlemleri tamamlanmamış veriler okunabilir. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;READ COMMITTED&lt;/b&gt;&amp;nbsp; Başka transactionlar tarafından güncellenmekte olan veriler, güncelleme işlemi tamamlanana kadar okunamazlar.&amp;nbsp; Bu &quot;dirty read&quot; i engeller.&amp;nbsp; Veri, her bir transaction arasında başka bir transaction tarafından güncellenebilir. Bu seviyede nonrepeatable veya phantom read ler oluşabilir.&lt;br /&gt;
READ COMMITTED seviyesi, SQL Server&#39;ın varsayılan isolation seviyesidir.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;REPEATABLE READ&lt;/b&gt; Güncellenen ancak henüz commit edilmeyen veriler, commit edilene kadar okunamaz veya başka transaction lar tarafından güncellenemez. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SNAPSHOT&lt;/b&gt; Veri herhangi bir zamanda okunabilir.&amp;nbsp; Okuma işlemi başladığında verinin son hali ne ise, o veri okunur.&amp;nbsp; Okuma için başlayan transaction, sadece başlamadan önce commit edilmiş verileri farkeder. Transaction başladıktan sonra başka bir transaction veriyi güncellerse, bu güncellemeleri görmez.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SERIALIZABLE&lt;/b&gt;&amp;nbsp; Commit edilmemiş veri okunamaz veya güncellenemez. Bir transaction, okunan veri aralığına ait key ile, okuma işlemi tamamlanana kadar insert işlemi yapamaz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/20633954562416933/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/20633954562416933' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/20633954562416933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/20633954562416933'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/transaction-isolation-level-lar-nedir.html' title='Transaction Isolation Level lar nedir?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-1103111198672294240</id><published>2010-10-24T18:07:00.001+03:00</published><updated>2010-10-24T18:10:39.882+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="view"/><title type='text'>SQL Server 2008 de View Türleri</title><content type='html'>SQL Server 2008 de birkaç çeşit view yaratabiliriz. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Standard view&lt;/b&gt; Bir veya birden fazla tablo içerebilir ve tablolar join ler ile birbirlerine bağlanabilir. WHERE ifadesi ile filtreleme yapılabilir, TOP ve ORDER BY ifadeleri ile kayıt sayısı sınırlandırılabilir (Order By View lerde TOP olmadan kullanılamaz)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Updateable view&lt;/b&gt;&amp;nbsp; Tek bir tablodan oluşur ve üzerinde INSERT, UPDATE, DELETE, ve MERGE gibi veriyi değiştiren ifadeler direk olarak çalışabilir. Ayrıca, birden fazla tablodan oluşan bir view üzerine INSTEAD OF trigger yazılarak, View deki hangi verinin hangi tabloyu güncelleyeceği bu trigger üzerinde yazılabilir.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Indexed view&lt;/b&gt; Bazen, bir view e index koymak optimizasyon için iyi sonuçlar üretebilir.&amp;nbsp; View le üzerine indexler tıpkı tablolarda olduğu gibi &quot;CREATE INDEX&quot; ifadesi ile yaratılırlar. Indexed Viewler WITH Schemabinding seçeneği ile oluşturulmalıdırlar. Bu da view in içerisinde kullanılan kolonların yapısının değiştirilmesini engeller. Viewlerde kullanılan kolonun veri tipi değişitirilemez, drop edilemez veya kullanılan tablo drop edilemez. Öncelikle view drop edilmeli, tablolardaki gerekli değişikliklerden yapıldıktan sonra yeniden yaratılmalıdır. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Partitioned view&lt;/b&gt; Bir tabloyu horizontal olarak (yani satırlarına göre) parçalamış isek bu view ile farklı parçalara ayrılmış tabloları tek bir view de biraraya getirebiliriz.&lt;br /&gt;
Örneğin bu yılın satışlarını 1 tabloda, geçen yılın satışlarını başka bir tabloda, 2 yıl ve daha eski satışları da başka bir tabloda saklıyor isek, partitioned view ile bu 3 tablodakii verileri birarada gösterebiliriz.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/1103111198672294240/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/1103111198672294240' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1103111198672294240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/1103111198672294240'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/sql-server-2008-de-view-turleri.html' title='SQL Server 2008 de View Türleri'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-5896713131881880804</id><published>2010-10-24T17:39:00.001+03:00</published><updated>2010-10-24T17:39:35.857+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constraint"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>SQL Server da Constraint ler Nasıl Çalışır?</title><content type='html'>SQL Server&#39;daki tablolara konulmuş constraint(kısıtlar)ler, bir tabloda bir DML kodu (INSERT, DELETE, UPDATE, MERGER) çalışırken kontrol edilir. &lt;br /&gt;
&lt;br /&gt;
Eğer gelen veri, tablodaki tüm kurallardan geçiyorsa işlem tamamlanır, eğer herhangi bir kolondaki, herhangi bir kısıta takılıyorsa o zaman transaction rollback edilir ve hiç bir veri güncelleme işlemi yapılmaz. &lt;br /&gt;
&lt;br /&gt;
Örneğin email alanına bir check constraint koyduysanız ve aynı anda 10 kayıt birden insert ediyorsanız, ancak sadece 1 tanesi sorunluysa, tüm insert cümlesi rollback edilir ve hiç bir kayıt tabloya eklenmez.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/5896713131881880804/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/5896713131881880804' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5896713131881880804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/5896713131881880804'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/sql-server-da-constraint-ler-nasl-calsr.html' title='SQL Server da Constraint ler Nasıl Çalışır?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6059072576933321310</id><published>2010-10-24T17:32:00.001+03:00</published><updated>2010-10-24T17:33:06.913+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constraint"/><category scheme="http://www.blogger.com/atom/ns#" term="Unique"/><title type='text'>Unique Constraint</title><content type='html'>Unique constraints, PRIMARY KEY e çok benzer. Tek farkı bir tabloda bir tane primary key olabiliyorken, gerektiği kadar unique constaint olabilmesidir. &lt;br /&gt;
Örneğin Müşteri tablonuzdaki, Ad, Soyad ve TelefonNo birleşiminden bir unique constraint yapıbilir, aynı zamanda email adreslerinin tutulduğu kolon için ayrı bir unique constraint yaratabilir ve email adreslerinin her müşteri kaydı için farklı olmasını garanti altına alabilirsiniz.&lt;br /&gt;
Unique constraint olan bir tabloda sadece 1 tane null değer olabilir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6059072576933321310/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6059072576933321310' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6059072576933321310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6059072576933321310'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/unique-constraint.html' title='Unique Constraint'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-8727260761849310768</id><published>2010-10-24T17:28:00.000+03:00</published><updated>2010-10-24T17:28:36.645+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constraint"/><category scheme="http://www.blogger.com/atom/ns#" term="primary key"/><title type='text'>Primary Key Nedir?</title><content type='html'>Primary Key aslında bir constraint (kısıt) dır. Bir tablonun bir satırını temsil eden tekil bir belirleyici kolondur. &lt;br /&gt;
Bir tabloda tek bir primary key olabilir. Ancak bir primary key tek bir kolondan veya birden fazla kolonun biraraya gelmesinden oluşabilir.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/8727260761849310768/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/8727260761849310768' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/8727260761849310768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/8727260761849310768'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/primary-key-nedir.html' title='Primary Key Nedir?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-4954619041433547427</id><published>2010-10-24T17:21:00.000+03:00</published><updated>2010-10-24T17:21:31.410+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="check"/><category scheme="http://www.blogger.com/atom/ns#" term="constraint"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>CHECK Constraint Nedir?</title><content type='html'>SQL Server&#39;da bir çok constraint (kısıt) kullanılabilir. &lt;br /&gt;
&quot;Check Constraint&quot; verinin doğruluğunu ve bütünlüğünü korumak üzere kullanılan bir kısıttır. Check constraint eklenmiş bir kolona yeni bilgi eklenirken veya bilgi güncellenirken, veri yazılmış olan kurallara göre kontrol edilir ve kurala uymuyorsa bir hata verilir ve veri kaydedilmez. &lt;br /&gt;
&lt;br /&gt;
Check constraint ifadesi, true veya false döndüren bir kural setidir.  Bu bir scalar function olabileceği için bir query de olabilir. Check constraint sadece false değer döndüğünde hata verir. Eğer ifade null döndürürse, bunu true gibi değerlendirir ve herhangi bir hata vermeden veriyi günceller. &lt;br /&gt;
 &lt;br /&gt;
Örneğin bir kolonda sınavlardan alınacak notları tutacak olalım. Notlar da 0-100 arasında değişiyor olmalı. Grade alanına bu kısıtı ekleyelim ve 100 ün üzerinde data girilmesini engelleyelim.&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE myTable ADD CONSTRAINT &lt;br /&gt;
 CK_Grade CHECK(Grade &lt;= 100 AND Grade &gt;= 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eğer tablomuzda veriler varsa ve daha önceden girilmiş verilerin kontrol edilmesini istemiyorsak with nocheck ifadesiyle bunu yapabiliriz. Aksi takdirde, veriler eklenen kurala uygun hale getirilene kadar check constraint eklenemez.&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE myTable WITH NOCHECK ADD CONSTRAINT &lt;br /&gt;
 CK_Grade CHECK(Grade &lt;= 100 AND Grade &gt;= 0)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/4954619041433547427/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/4954619041433547427' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/4954619041433547427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/4954619041433547427'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/check-constraint-nedir.html' title='CHECK Constraint Nedir?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-527467525254650673</id><published>2010-10-24T17:03:00.000+03:00</published><updated>2010-10-24T17:03:57.713+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computed"/><category scheme="http://www.blogger.com/atom/ns#" term="deterministic"/><category scheme="http://www.blogger.com/atom/ns#" term="persisted"/><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><title type='text'>Computed Columns Nedir? Nasıl Kullanılır?</title><content type='html'>Computed column, bir tablonun aynı satırındaki diğer alanlara referans ederek hesaplama yapan bir formüldür aslında. Scalar fonksiyonlar da (tek bir değer döndüren fonksiyon), computed column tanımlarken kullanılabilir. Bir computed column, başka bir tablodaki verilere (tabii fonksiyon kullanmıyorsa) ulaşamaz veya sub query içeremez. &lt;br /&gt;
&lt;br /&gt;
Varsayılan olarak, SQL Server&#39;daki computed column lar sanaldır. Yani içerdikleri değerler diskte saklanmazlar, veri çekildiği zaman hesaplanırlar. Bu nedenle computed column içeren bir tabloyu SELECT * FROM ile çekmek performans sıkıntılarına yol açabilir. &lt;br /&gt;
&lt;br /&gt;
Computed kolonları daha etkin tutmak ve performansını arttırmak için, disk  üzerinde de saklayabiliriz. Bunun için PERSISTED anahtar kelimesi kullanılabilir.&lt;br /&gt;
SQL Server, persisted ile işaretlenmiş computed alanları, gerçek bir değer olarak disk üzerinde saklar ve bu alanı etkileyecek herhangi bir değişiklik olduğunda veya yeni kayıt eklendiğinde bu alanı da günceller. &lt;br /&gt;
&lt;br /&gt;
Sadece deterministic fonksiyon kullanan computed kolonlar PERSISTED olarak işaretlenebilir.&lt;br /&gt;
Deterministic fonksiyon, aynı değer verildiğinde aynı sonucu döndüren fonksiyondur. Örneğin avg fonksiyonu, aynı değerler ile her zaman aynı sonucu döndürür. Oysa getdate(), deterministic bir fonksiyon değildir.&lt;br /&gt;
&lt;br /&gt;
Bir computed column, deterministic olsun veya olmasın içerisindeki veri güncellenemez. Dolayısıyla hiçbir zaman insert veya update cümlesi içerisinde güncellenecek alanlar içerisinde yer alamaz.&lt;br /&gt;
&lt;br /&gt;
Bir örnek ile nasıl computed kolon yaratıldığını görelim.&lt;br /&gt;
Bir tabloda ürünün birim satış fiyatı ve vergi oranı olsun. Vergi eklenmiş hali kaç fiyata satılacağını computed kolon kullanarak bulabiliriz.&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE myTable ADD PriceWithTax as UnitPrice + (UnitPrice*TaxRatio)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/527467525254650673/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/527467525254650673' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/527467525254650673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/527467525254650673'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/computed-columns-nedir-nasl-kullanlr.html' title='Computed Columns Nedir? Nasıl Kullanılır?'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6484712581736096660</id><published>2010-10-24T15:50:00.001+03:00</published><updated>2010-10-24T16:10:09.359+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sql server"/><category scheme="http://www.blogger.com/atom/ns#" term="sys.objects"/><title type='text'>sys.Objects View ile veritabanındaki nesnelerin görüntülenmesi</title><content type='html'>SELECT * FROM sys.objects  &lt;br /&gt;
&lt;br /&gt;
kodunu çalıştırarak veritabanındaki tüm nesnelerin listesine ulaşılabilir.&lt;br /&gt;
&lt;br /&gt;
Bu kodun döndürdüğü alanlardan bazılarına bakalım. &lt;br /&gt;
&lt;b&gt;name&lt;/b&gt; :nesnesnin adı&lt;br /&gt;
&lt;b&gt;object_id&lt;/b&gt;: SQL Server&#39;deki her bir nesnenin tek bir id si vardır. Sistem tablolarında veya view lerinde bu id ile kullanırlar. Örnein bir tablonun içindeki kolonlar sys.columns view i kullanılarak görülebilir. Bir kolonun hangi tabloya ait olduğu bilgisi saklanırken, objenin adı değil, id si saklanır. Bir nesnenin id sini öğrenmek için de object_id sistem fonksiyonu kullanılabilir.&lt;br /&gt;
&lt;br /&gt;
SELECT object_id(&#39;myobjectname&#39;)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;type&lt;/b&gt; : SQL Server objesinin ne tür bir obje olduğunu gösterir. Aşağıda bu türlerin listesini bulabilirsiniz.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;C&lt;/b&gt; Check constraint&lt;br /&gt;
&lt;b&gt;D&lt;/b&gt; Default constraint&lt;br /&gt;
&lt;b&gt;F&lt;/b&gt; Foreign Key constraint&lt;br /&gt;
&lt;b&gt;FN&lt;/b&gt; Transact-SQL scalar function&lt;br /&gt;
&lt;b&gt;FS&lt;/b&gt; Clr scalar function&lt;br /&gt;
&lt;b&gt;IT&lt;/b&gt; Internal table&lt;br /&gt;
&lt;b&gt;P&lt;/b&gt; SQL stored procedure&lt;br /&gt;
&lt;b&gt;PK&lt;/b&gt; Primary Key constraint&lt;br /&gt;
&lt;b&gt;S&lt;/b&gt; System table&lt;br /&gt;
&lt;b&gt;SQ&lt;/b&gt; Service queue&lt;br /&gt;
&lt;b&gt;TF&lt;/b&gt; SQL table valued function&lt;br /&gt;
&lt;b&gt;TR&lt;/b&gt; SQL trigger&lt;br /&gt;
&lt;b&gt;U&lt;/b&gt; User table&lt;br /&gt;
&lt;b&gt;UQ&lt;/b&gt; Unique constraint&lt;br /&gt;
&lt;b&gt;V&lt;/b&gt; View&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6484712581736096660/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6484712581736096660' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6484712581736096660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6484712581736096660'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/sysobjects-view-ile-veritabanndaki.html' title='sys.Objects View ile veritabanındaki nesnelerin görüntülenmesi'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6111056746116436593.post-6407555321278948747</id><published>2010-10-24T15:00:00.001+03:00</published><updated>2010-10-24T15:02:34.720+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Resource Governance"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008"/><title type='text'>Performance Data Management ve Resource Governor</title><content type='html'>Performance data management SQL Server 2008 ile gelen yeni bir tool.&lt;br /&gt;
Bu tool, zamanla, SQL Server üzerinden performans ile ilgili veri toplamımızı sağlıyor.&lt;br /&gt;
Bir datawarehouse (toplandığı sonuçları saklamak için) ve&amp;nbsp; &quot;data collector&quot; (belli zamanlarda çalışarak veri toplamak için) parçalarından oluşuyor.Data Collector sadece SQL Server 2008 versiyonlarındaki veritabanları için çalışıyor.&lt;br /&gt;
&lt;br /&gt;
Resource Governor ise süreçlerin kaynak kullanımlarını sınırlandırarak, iş yüklerinin yönetilmesine olanak veriyor.&lt;br /&gt;
Resource Governor u kullanmak için, DBA bir &quot;workload group&quot; ve bir &quot;resource pool&quot; yaratır. Workload group ları kullanıcıların oturumlarını tutan yapılardır.&amp;nbsp; Workload groupları,&amp;nbsp; resource pool ları ile eşleştirilirler. Bu eşleştirmeler sınıflandırıcı fonksiyonlara göre (classifier functions) yapılır. Sınıflandırıcı fonksiyonlar IP, kullanıcı adı, uygulamanın adı olabilir. &lt;br /&gt;
Resource Governence tool&#39;u kullanarak, kritik uygulamalara daha fazla ram, cpu gibi kaynaklar ayırıp, çok fazla performansa ihtiyacı olmayan uygulamalar için daha az kaynak ayırabiliriz örneğin.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-15834379-2&quot;);
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programlamanotlari.blogspot.com/feeds/6407555321278948747/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6111056746116436593/6407555321278948747' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6407555321278948747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6111056746116436593/posts/default/6407555321278948747'/><link rel='alternate' type='text/html' href='http://programlamanotlari.blogspot.com/2010/10/performance-data-management-ve-resource.html' title='Performance Data Management ve Resource Governor'/><author><name>Birsen Tunç Yazar</name><uri>http://www.blogger.com/profile/06851995182491826216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>