Aylık arşivler: Ocak 2012

SQL Server Single User ve Restricted User Arasındaki Fark

SQL Server’de sistem yöneticisi olarak sistem üzerinde kullanıcıları etkileyecek bir maintenance çalışma yapacağımız zaman o süre zarfında kullanıcıların işlem yapıp yapamayacaklarını dikkate almalıyız. Kullanıcı erişimlerini kısıtlamak için Restrict Access özelliği kullanılır.

Bu özellikle 3 seçenek sunar;
Multi User : Default değer olup veritabanına tüm kullanıcıların erişilebileceğini belirtir.
Single User : Aynı anda tek bir kullanıcının erişebileceği anlamına gelir. Bu herhangi bir kullanıcı olabilir. İlk önce kim giriş yaparsa oturumu o almış olur. Bu kullanıcı bağlantısı bitmeden başka kullanıcı o veritabanına erişemez. Bu seçeneği genellikle sistem yöneticisi kendi oturumunda kritik bir işlem yapacağı tercih eder.
Restricted User : Bu seçenek ise Single User’e benzerlik gösterse de tek kullanıcı için değil tüm db_owner, dbcreator ve sysadmin üyeleri için erişimi açık bırakır. Bunların dışındaki kullanıcılara database erişiminde bulunamazlar.
Okumaya devam et

SQL Deyimlerinin Yürütülme Sırası

T-SQL’de temel olarak veri arama, bulma ve işleme işlemleri gerçekleştirilir. En çok kullanılan yantümce hiç şüphesiz “SELECT” deyimidir. Peki SELECT ve onunla birlikte kullandığımız ifadeler hangi sırayla yürütülmektedir. SQLHacks’de denk geldiğim bu küçük bilgiyi paylaşmakta fayda görüyorum. Bir SELECT cümlesi yüzeysel olarak aşağıdaki formata sahiptir.
SELECT DISTINCT TOP (list)
FROM (LeftTable)
(join type) JOIN (RightTable)
ON (condition])
WHERE (condition)
GROUP BY (list)
WITH (CUBE | ROLLUP)
HAVING (condition)
ORDER BY (list)

SQL Server öncelikle FROM alanındaki kaynakları işler. Ardından kaynaklar üzerinde tanımlı koşulları çalıştırır. Varsa gruplama, özetleme işlemlerini uygular ve son olarak hangi alanlar istenmişse onları seçer.
Bu ifadeler için değerlendirilme, yürütülme sırası aşağıdaki gibidir;

  1. FROM (LeftTable – Sol Tablo)
  2. ON (condition – Şart, koşul)
  3. (join type) JOIN (RightTable – JOIN türü, Sağ tablo)
  4. WHERE (condition – Şart, koşul)
  5. GROUP BY (list – özetleme alanları)
  6. WITH (CUBE | ROLLUP)
  7. HAVING (condition – özetlenmiş alan filtreleri)
  8. SELECT
  9. DISTINCT
  10. ORDER BY (list – sıralama alanları)
  11. TOP (list – kayıt adeti)

Common Table Expression (CTE) Nedir, Ne Değildir ?

SQL Server 2005 ile birlikte sunulan CTE (Common Table Expression – Ortak Tablo İfadeleri), bir sorgunun yürütülmesi anında elde edilmiş geçici sonuçlar bir veya daha fazla kere kullanılmasını sağlayan ifadelerdir. CTE bir table veya view olmayıp sadece bir sorgu ifadesidir. Yani geçici ve kalıcı tablolar gibi herhangi bir veri içermezler. Bir CTE’nin basit yazım biçimi aşağıdaki gibidir;

WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )

CTE’ler WITH sözcüğüyle tanımlanır. CTE’lerin en önemli özelliği kendi kendini çağırabiliyor olması ve aynı sorgu içerisinden birden fazla çalıştırılabiliyor olmasıdır. Bu özelliğiyle CTE’ler daha çok recursive(Öz-yinelemeli) işlemler için geliştirilmiştir diyebiliriz. Örnek olarak hiyerarşik listeler için tercih edilir. Bu tür işlemler için geçici tablolar kullanılabiliyor olsa da CTE’ler daha iyi bir performans sağlar. En azından tablo okuma ve işlemler gibi herhangi bir log izi oluşturmaz.
CTE’ler table ve view yapılarından farklı olarak primary key, unique, not null, default. gibi constraint’ler desteklemez. Aslında olmayan birşeyden daha doğrusu sadece çağrıldıkları anda oluşan bir yapıdan bahsediyoruz.
CTE’ler yalnızca SELECT değil INSERT, UPDATE ve DELETE yapılarında da kullanılabilir.
Okumaya devam et