MSSQL

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 622 197 mezo

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası

Merhaba gençler 🙂

Hemen size sıcak sıcak bilgi paylaşayım.

MS SQL server mı kullanıyorsunuz ?  Veritabanlarınızı başka bir yerden restore veya attach mi yaptınız ?  Login kullanıcı SA nin db yetkilerini vermek mi istiyorsunuz ama başaramıyormusunuz ? İşte doğru adrestesiniz 😀

Konumuz Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 🙂  5 dk önce beni deli eden ama çözümü basit bir problemden bahsedeceğim şimdi.

Veritabanlarını restore ettikten sonra SA kullanıcısına dbowner yetkisi vermek istediğimde karşıma böyle bir hata çıktı

Hatamızın görüntüsü şöyle güzel bir hata :

Untitled picture

Bu hatayı alıyorsanız hiç uğraşmayın arkadaşlar hemen New Query hangi DB ile işlem yapacaksanız seçin ve şu kodu çalıştırın olsun bitsin 🙂

 

exec sp_changedbowner 'sa','true'

 

Umarım Yararlı Olur

Bilgiyle Kalın 🙂

M.Zeki Osmancık

 

The type initializer Hatası… 611 193 mezo

The type initializer Hatası…

Merhaba arkadaşlar
Sql Server 2008 i kaldırıp tekrar kurmak zorunda kaldım. ancak bunu yaptığımda karşıma bir hata çıktı. Sizlerle paylaşmak istedim hata şöyle

vVkwW
Error >

TITLE: Microsoft SQL Server Management Studio
——————————

The type initializer for ‘Microsoft.SqlServer.Management.Dmf.PolicyStore’ threw an exception. (Microsoft.SqlServer.Dmf)

——————————
ADDITIONAL INFORMATION:

Could not load file or assembly ‘Microsoft.SqlServer.Diagnostics.STrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91′ or one of its dependencies. The system cannot find the file specified. (Microsoft.SqlServer.Dmf)

——————————
Internette araştırınca gerekli gereksiz herkes bir şeyler söylemiş yok onu yükle yok Visual Studio yu kaldır kur yok onu ekle kaldır gibi gibi. Bunlardan bazılarını deneyip vakit kaybettikten sonra bir şey denemek geldi içimden bir ses dediki REPAIR et yeğen dedi.
Çalıştırdım SQL Server Setup ı ve Repair ettim ve sorun çözüldü 🙂

Umarım faydalı olur
Bilgiyle Kalın
M.Zeki Osmancık

LDF Olmadan Database Oluşturmak 512 512 mezo

LDF Olmadan Database Oluşturmak

Merhaba arkadaşlar
Sabahın köründe karşıma çıkan ilginç bir konuyu sizlerle paylaşmak istiyorum. LDF dosyası olmadan database oluşturabilir miyiz ? Cevabımız evet
Neden böyle birşey isteyelim ki demeyin isteyen istiyor 😀
İşte gerekli scrip 😀

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

Türkiye İl, İlçe, Semt, Mahalle, Köy, Posta Kodu Güncel Veritabanı 760 349 mezo

Türkiye İl, İlçe, Semt, Mahalle, Köy, Posta Kodu Güncel Veritabanı

Merhaba Arkadaşlar

Kısa bir süre önce bir projede kullanmak üzere il ilçe semt bilgileri gerekti ve bu bilgileri bulmuşken sizlerlede paylaşayım istedim 🙂

Mysql veritabanın da kullanacaksınız bu linkten ulaşabilirsiniz. Ama biz MSSQL kullanıyoruz ne yapacağız demeyin üzülmeyin gençler. Kendimde MSSql kullandığımdan oturdum uğraştım ve verileri import ettim 😛

Eğer MSSql Server 2008 R2 kullanıyorsanız buradan , MSSql Server 2012 kullanıyorsanız buradan scriptlere ulaşabilirsiniz.

Haydi Kolay Gele

Umarım Yararlı Olur.

Bilgiyle Kalın

M.Zeki Osmancık

SQL _ Trigger 713 381 mezo

SQL _ Trigger

Merhaba arkadaşlar

Fazla zamanım olmadığı için blogla fazla ilgilenemiyorum  işte o nadir bulduğum zamanlardan birtanesinde daha  yararlı olacağını umduğum bir konu ile sizlerleyim. (TV programı gibi oldu ama idare edin artık :D) .

Bugün sizlere parmaklarımın yazabildiği kadar trigger anlatmak istiyorum.

Trigger Nedir?  Önce bu soruya çok basit bir bakış açısı ile bakalım yani trigger in türkçe meali ile.  Ne dersiniz ? Evet dediğinizi duyar gibiyim adeta 😀  Trigger tetik demektir. Nasıl yani tetik bildiğimiz silahlardaki tetikten işte 😉  Tetik çekildiğinde nasıl silah bir takım işlemler gerçekleşiyor ve kurşun atıyor . Sql dede bazı işlemlerden sonra otomatik olarak başka işlemlerin yapılmasını yani tetiklenmesini isteyebiliriz böyle bir yapıyı Trigger dediğimiz kod parçaları gerçekleştirirler…

Peki Trigger dediğimiz olay nasıl yazılır yada yapılır???

 

Triggerlar, Query ekranında T-SQL kodu ile veya Management Studio ile oluşturulup yönetilebilirler ve  View  ve tablolar üzerinde tanımlanabilir.  CREATE TRIGGER komutunu  kullanabilmek için sysadmin, db_owner veya db_ddladmin  rolüne sahip olmak gerekir.  Bir trigger başka bir tabloya erişecekse bu tablo için de trigger oluşturan kullanıcının erişim izni veya güncelleme izni olması gerekir.

 

Peki trigger ‘ ları ne zaman kullanırız ?

*  Değişiklikleri takip etmek için,

* Birincil anahtar üretmek için,

* Karmaşık iş kurallarını gerçekleştirmek için,

* E-posta atmak gibi olayları otomatik olarak yapmak için,

* Standart hata mesajlarının dışında bir hata mesajı elde etmek için,

* Veritabanı erişimlerini takip edebilmek için,

* Nesnede meydana gelebilecek değişiklikleri takip ve engellemek için kullanabiliriz.

 

Trigger dediğimiz yapı kendi içinde 2 ye tekrar o  bölünenlerden biride  ikiye ayrılır 😀 çokmu karışık oldu ? 😀 yani özetle şöyle :

DDL Trigger’lar: Create, Alter ve Drop işlemleri gerçekleştiğinde çalışan trigger’lardır.

DML Trigger’lar: Insert, Update ve Delete işlemleri gerçekleştiğinde çalışan trigger’lardır.

CREATE TRIGGER tetikleyici_adiON tablo_adiFOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)AS Sql ifadeleri

 

After (For) Trigger’ı: After triggerları, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir.

Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After triggerları tanımlanabilir.

Create Trigger Tg_SilinenKayıtlar

On Employees

After Delete

As

Begin

Declare @Ad nvarchar(50)

Declare @CalisanID İnt

Select @Ad=FirstName,@CalisanID=Employees From Deleted

Select CalisanID,Ad+’-Silinmiştir’,GetDate()From Deleted

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad+’- Silindi’,GetDate())

End

Instead Of Trigger’ı: Instead of triggerları, belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. Instead of triggerlari işlemlerin arasına girebildiğinden kontrol amaçlı kullanılabilirler. Tıpkı After triggerları gibi temel veritabanı işlemleri için Instead Of triggerları  tanımlanabilir.

Alter Trigger Tg_CalisanKayitRaporOn EmployeesAfter InsertASBegin

Declare @Ad Nvarchar(50)

Declare @CalisanID int

Select @Ad = FirstName,@CalisanID = EmployeeID From Inserted

 

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad,GetDate())

End

 

INSERT – UPDATE – DELETE

Trigger devreye girdikten sonra Inserted veya Deleted tablolarında yeni eklenen veya silinen kayıtların bir kopyası tutulur.

Trigger Update (ALTER)

CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler

yapmak üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.

 

Trigger Silmek (DROP)

Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak açılan menüden Delete komutunu vererek silebilirsiniz.

Delete Trigger Tg_CalisanKayitRapor

Trigger Enable ya da Disable

Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum oluştuğunda otomatik olarak devreye girer. İstenildiğinde oluşturulan bu tetikleyiciler pasif

hâle getirilebilir. Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde tetikleyici pasif hâle gelir.

ALTER TABLE tablo_adiDISABLE TRIGGER Musteri_SilmeveyaENABLED TRIGGER Musteri_Silme

 

Umarım yararlı olur…

 

M.Zeki Osmancık.

 

SQL _ Stored Procedure 600 545 mezo

SQL _ Stored Procedure

Merhaba arkadaşlar bu yazımızda Sql içersinde bulunan ve hayat kurtaran Stored Procedure konusuna değineceğiz.

Bir amaca ulaşmak için takip edilen yol ve yöntem tanımından yola çıkılarak, bir prosedür herhangi bir işlevi yerine getirebilmek için yazılan kodların bir paket içersinde tutulmuş halidir diyebiliriz.

Stored procedure kullanmanın bize sağladığı yararlardan kısaca bahsetmek gerekirse :
• Çalışırken bazı planlamaların doğru olarak yapılmasını sağlar ve tekrar tekrar kullanılabilir bir yapıdır.
• İçersine yazılan sorgulara parametrelendirme özelliği katar.
• Uygulamalar  arasında kullanılabilir.
• Güvenli data giriş çıkış ve düzenlemesi sağlar.
• Daha az network bandwidth kaynak kullanımı sağlar.
• Job olarak tanımlanabilir ve schedule edilebilir.
• Database objelerine daha güvenli erişim olanağı tanır.
Stored procedure bileşenleri parçalara ayırır yani parsing işlemi gerçekleştirir.
Yani ilk olarak ; Veritabanı içersinde view table vb. nesnelere gönderme yapan referanslar varsa geçerli olup olmadıklarını (nesnenin ve iznin olup olmadığı) kontrol eder.Kontrollerden geçen SP nin adı sysobject tablosuna kodları ise syscomments tablosuna kaydedilir.
Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.
Stored Procedure herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk defa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde Stored Procedure’ün derlenmiş haliçalışır. Bundan dolayı Stored Procedure’ler derlenen nesnelerden biri olarak bilinir.

Stored Procedure Oluşturmak

CREATE PROC [ EDURE ] prosedür_adıAST-SQL ifadeleri

Değişiklik Yapmak

ALTER PROC [EDURE] prosedür_adıAST-SQL ifadeleri

Bir Stored Procedure’de değişiklik yapabilmek için önce kaynak kodunun alınması ve bir Query ekranına kopyalanıp düzenlenmesi gerekir.

Stored Procedure’ü Silmek

DROP PROC  sahip.prosedür_adı

Var olan bir Stored Procedure’ü silmek için DROP komutunu kullanmak gereklidir.

DROP komutundan sonra Stored Procedure’ün sahibinin adı ve Stored Procedure’ün adı yazılmalıdır.

Değer Alan Stored Procedure’ler

Stored Procedure’lerin daha etkin kullanılabilmesi ve işlevsel bir hale gelebilmesi için dışarıdan değer almalarına ihtiyaç duyulur. Bu nedenle girdi parametreleri (Input Parameter) kullanılır.

Değer Alıp-Veren Stored Procedure’ler

Değer alıp-veren stored procedure ler, query’den gönderilen değerleri alıp istenilen işleme tabi tuttuktan sonra elde edilen sonucu tekrar Query’e gönderen prosedürlerdir. Buişlem için OUTPUT parametresi kullanılır.

RETURN Deyimi

Prosedürden tek bir tamsayı değer döndürmek için bir başka seçenek olarak RETURN ifadesi kullanılabilir. Bu şekilde OUTPUT parametresini hem prosedür içinde hem de prosedürün çağrıldığı yerde tanımlamak zorunda kalınmadan doğrudan değer döndürülebilir.

Store Procedureler  kısaca bu kadar…

Umarım yararlı olur.

Tekrar görüşmek üzere…

M.Zeki Osmancık

MSSQL Database Terminolojisi 150 150 mezo

MSSQL Database Terminolojisi

Merhaba arkadaşlar bu yazımızda veritabanı ile alakalı bazı terimleri sizlere açıklamaya çalışacağım.

VeriTabanı (Database):Verilerin fiziksel hafızada saklandığı  datafiles ve bu verilerin olaylarının loglandığı log dosyalarından oluşan en az 2 dosyadan oluşan yapıları SQL Server VeriTabanı (Database) olarak değerlendirir.

Schema (Şema):Bir veritabanı içersinde yaratılan farklı  schemalar içersinde aynı isimde tablolar ,store procedureler gibi farklı nesneler yaratabilmek mümkün oluyor böylelikle database içersindeki nesneleri gruplara ayırarak çalışmayı kolaylaştırabiliyoruz.

Table (Tablo) :Günlük hayatta kullandığımız liste mantığı ile oluşturduğumuz nesnelerdir.Yani bir sınıf listesinden tutun alışveriş listesine kadar tüm listeleri tablo olarak tanımlayabiliriz. Teknik olarak bakarsakta satır ve sütunlardan oluşan veri saklayabilen veritabanının en temel nesnesi diyebiliriz.

ResultSet (Sonuç Kümesi): Bir seçme ve listeleme  işlemi gerçekleştiğinde bazen bir bazen birden fazla tablo kullanılarak hazırlanan ve veritabanı üzerinde mevcut olmayan tabloların hepsi birer sonuç kümesidir.

Row (Satır): Tablo üzerinde mevcut olan her bir kayıt bir satıra denk gelir.

Column(Sütun): Tablolarda dikey sütunların yanyana gelmesi ile meydana gelmiştir. Bir ürün tablosunu ele alacak olursan her ürün bir satır bu ürünün her bir bilgiside sütundur.

Field (Alan): Yapılandırılmış  bilginin her bir kısmını saklamak üzere yapılan tanımlamadır. Bu alanın uzunluğu ne kadar olacak harf ise ne kadar harf alabilir, rakam ise kaç basamaklı olacak bu türden soruları yanıtlamak için bir alan tanımlamak ve bu alanada bir veri tipi belirtmemiz gerekir.

Data Type (Veri Tipi): Bilgisayar kayırları yapısal olarak tutarken onların yapıları hakkında fikir sahibi olabilmek için bazı özellikleri önceden tanımlanması gerekir. İşte bu özellikleri belirten tipler veri tipleridir.

Record (Kayıt) : Yapılandırılmış verilerden her birine bir kayıt denir.  Yani alan bilgileri ile birlikte her bir satır kayıttır.

Constrait (Kısıtlayıcı) : Herhangi bir alan içersine girilebilecek bilgileri zorlayıcı kurallara denir. Birincil Anahtar Kısıtlayıcı , Tekill Kısıtlayıcı , Default Kısıtlayıcı, Yabancı Anahtar Kısıtlayıcı, Kontrol Kısıtlayıcı olmak üzere 5 tür kısıtlayıcı vardır.

Default  : Tabloda bir alana değer girilmediğinde bu alan için standart olarak önceden bizim belirttiğimiz bir veri veya verinin ilk giriş işlemi esnasında otomatik olarak  bu sütuna atanması.

Rule (Kural):Bir alana girilebilecek verilerin bir kurala bağlı olmak üzere girilmeye zorlanması için yapılan tanımlamalara denir.

Indexes (İndeksler) : Bir kaç yüz kayıttan oluşan bir tablo üstüne kayıt arama işlemi veritabanı yönetim sistemi için oldukça basit bir işlemdir ancak bu sayı milyonlara çıktığında çeşitli kriterlere bağlı olarak organize edip sıralayacak bu sayede hızlı erişimi sağlayacak yapılar vardır. Veriler fiziksel olarak düzenleniyorsa CLUSTERED INDEX (Kümelenmiş), fiziksel olarak düzenlenmiyorsa UNCLUSTERED  INDEX(Kümelenmemiş) adını alır.

View : Bazen hazırlanan sorguların veya elde edilen sonuç kümelerinin bir tablo gibi davranması istendiğinde View kullanılarak bu sanal tablo oluşturulur.

Synonim : View den farklı olarak tablolar dışındaki store procedureler gibi nesnelerede takma adlar verebilmemizi sağlar.

Stored Procedure (Kaydedilmiş Yordamlar) : SQL kodları çalıştırılmadan önce veritabanı yönetim sistemi tarafından yorumlanır ve derlenir  ardından çalıştırılmak istenen kod çalışır ve sonuç kümesi elde edilir. Bu işlem sırasındaki yorumlama ve derleme kısmı veritabanı yönetim sistemine ek bir yük getirir. Bunu hızlandırabilmek için derlenmiş ve yorumlanmış ifadeleri kullanabiliriz. Bu derlenmiş ifadeler Stored Procedurelerdir. Genellikle veri erişim katmanı olarak kodlanırlar.

Cursor (İmleç) : Veritabanında bulunan kayıtlara satır satır erişmek istediğimizde bu işi bizim yerimize imleçler halleder. İmleçler genellikle veritabanı üzerindeki verilere baım yapılırken kullanılırlar.

Trigger (Tetikleyici) : Triggerler veritabanı üzerindeki veriler ile ilgili ekleme, silme , düzenleme gibi işlemler yerine veya bu işlemlerden sonra otomatik olarak yapılacak olan işlemlerin belirtildiği yapılardır.  Veri bütünlüğünü sağlamak amacıyla kullanılırlar.

UDF User Defined Functions (Kullanıcı Tanımlı Fonksiyonlar) : UDF ler genellikle karmaşık işlemlerin  tek bir sefer fonksiyon olarak kaydedilip daha sonra sadece isimleri ile çağrılabilen bir yapıdır. Stored Procedure lerden tek farkı select sorguları içersinde onların bir parçası gibi kullanılabilmeleridir.

User Defined Types  (Kullanıcı Tanımlı Tipler): SQL server 2005 den itibaren 8K yi aşmamak için kendi gereksinimlerimizi  giderebilmek için oluşturduğumuz kendine özgü metotlarıda içersinde bulundurabilen tiplerdir.

Umarım yararlı olur

Sonraki yazılarda görüşmek üzere …

M.Zeki Osmancık

TSQL _ Select 387 260 mezo

TSQL _ Select

Merhaba Arkadaşlar . Bu yazımızda TSQL den bahsetmek istiyorum.  Veritabanı programları ile uğraşanların yada biz programcıların sürekli kullandığı hatta bazen baş belası olabilen bu SQL neymiş ona bakalım.

SQL (Structured Query Language) yani Yapılandırılmış  Sorgulama Dili anlamına gelen veritabanı sorgulama dilidir. SQL, düzeltilmesi veya değiştirilmesi istenen bilgileri açıkça belirtmeye izin veren ve yerine getirilebilecek başlıca işlemleri tanımlamamızı sağlayan bir komut takımıdır

Sql deki kodları :

Veri İşleme Dili – DML (Data Manipulation Language )

Veri Tanımlama Dili – DDL (Data Definition Language)

Veri Kontrol Dili  – DCL(Data Control Language)

Olarak gruplayabiliriz.

Bu gruplar içersinde hangi kodlar var peki?

Veri İşleme Dili – DML (Data Manipulation Language )

SQL Veri İşleme Dili veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür.

SELECT : Veri seçmek

DELETE : Veri silmek

UPDATE : Veri güncellemek

INSERT : Veri girmek

Veri Tanımlama Dili – DDL (Data Definition Language)

SQL Veri Tanımlama Dili verilerin tutulduğu nesneler olan tabloların yaratılmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar.

CREATE TABLE : Yeni bir tablo yaratmak

ALTER TABLE : Tabloda değişiklik yapmak

DROP TABLE : Tabloyu silemek

CREATE INDEX : Tabloda dizin oluşturmak

Veri Kontrol Dili  – DCL(Data Control Language)

SQL Veri Kontrol Dili bir veritabanı kullanıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar.

GRANT :Kullanıcıya yetki vermek

DENY:Kullanıcı, grup veya rolü herhangi bir eylem için engeller.

REVOKE:Daha atanmış olan yetki veya engeli kaldırır.

Veritabanında Arama İşlemleri

Bir veritabanı içersindeki bilgilerimiz arasında belli kriterlere uygun yada bir rapor şeklinde bir arama gerçekleştirmek istiyorsak  kullanmamız gereken kod  Select olmalıdır.

Select ifadesi bir tablodan verileri seçmek için kullanılır. Elde edilen veriler sonuç kümesi olarak adlandırılır ve yine bir tablo görüntüsü şeklinde görüntülenir.

Söz dizimi:

Tüm alanları görüntülemek istemediğimiz zamanlarda kolon adı belirterek istenilen bilgiler çekilebilir.

SELECT <görüntülenmek istenen kolonlar> FROM <tablo adı>

Tüm alanları göstermek istediğimiz durumlarda kolon adı yerine * kullanılır.

SELECT * FROM <tablo adı>

Şimdi birlikte bir örnek yapalım. Northwind veritabanı içersinde bulunan herhangi bir tablonun bilgilerini önce tablo ismi ile sonra * ile çağıralım.

Verilerimizi tablo ismi ile yada * simgesiyle hepsini getiriyoruz. Süper ama bir sorun var  yada sorundan çok bir eksik demeliyiz belkide belli kriterlere uyan bilgileri getirmek istediğimde ne yapmam gerekir ?

Böyle bir durumdada yardımımıza WHERE yantümcesi koşuyor. WHERE yantümcesi görüntülemek istediğimiz verileri belirli bir kritere göre seçebilmemizi sağlar.

Yazımı

SELECT <sütun adı> FROM <tablo adı> WHERE <koşul(lar)>

Yani WHERE yantümcesi diyor ki bana istediğin kriteri söyle NERDE eşleşen varsa alayını getireyim sana diyor. Ama bu kriterleri hangi operatörlerle sağlarız birde onu belirtelimki sadece eşittir işaretinden ibaret olduğu anlaşılmasın.

İşte WHERE yantümcesi ile kullanabileceğimiz operatörler

Bizde teşekür edip bir örnek yaparak Where yantümcesi istediğini veriyoruz.

Bu kez müşteriler tablosundayız ve Madrid deki müşterilerimizi görmek istiyoruz.

Nasıl Where yantümcesi işini iyi yapıyor değilmi 😀

WHERE yantümcesinin  operatörlerinden bahsetmiştik orada herşey güzel anlaşılır matematiksel şeyler var ama 2 operatör varki kafa karıştırabilir.  LIKE ve BETWEEN  bunlarında nasıl kullanıldığına kısaca deyinelim

LIKE

LIKE kelimesi sütundaki değerlerin, joker karakterler kullanılarak oluşturduğumuz bir arama koşulu ile karşılaştırılmasını sağlar.

SELECT <kolon adı> FROM <tablo adı>

WHERE <aranacak sütun> LIKE <kriter>

Örnek arama koşulları:

LIKE ‘BR%’                          İlk iki harfi BR olan tüm kayıtlar

LIKE ‘Br%’                           İlk iki harfi Br olan tüm kayıtlar

LIKE ‘%een’                       Son üç harfi een olan tüm kayıtlar

LIKE ‘%en%’                      İçerisinde en ifadesi geçen tüm kayıtlar

LIKE ‘_en’                           Son iki harfi en olan üç harften oluşan tüm kayıtlar

LIKE ‘[CK]%’                       C veya K harfleriyle başlayan tüm kayıtlar

LIKE ‘[S-V]ing                    ing ile biten ve ilk harfi S ile V harfleri arasında olan dört harfli herhangi kelime

LIKE ‘M[^c]%’                   M ile başlayan ikinci harfi c olmayan tüm kayıtlar

BETWEEN..AND

BETWEEN … AND operatörü 2 değer ile belirtilen aralığı sınar. Bu değerler sayı, metin veya tarih olabilir.

SELECT <kolon adı> FROM <tablo adı>

WHERE <sütun adı> BETWEEN <değer 1> AND <değer 2>

Umarım faydalı olmuştur bir başka yazıda görüşmek dileği ile ….

M.Zeki Osmancık

SQL _ Views II 253 219 mezo

SQL _ Views II

Bir önceki yazımızda View nasıl yazılır ne işe yarar bunu öğrenmiştik . Bu yazımızda ise View içersinde yapabileceğimiz bir takım işlemleri öğreneceğiz.
Oluşturduğumuz View yapısı üzerinde değişiklik yapabilmek için Alter View; Silebilmek için Drop View cümlelerini kullanıyoruz.

Encryption:

Encryption cümlesi şifreleme anlamına gelir. Türkçe anlamınında belirttiği gibi view in kod içeriğini  yani view i oluşturduğumuz kodları görüntülenemez şekilde şifrelememizi sağlar. Bu işlemi geri almak istersek maalesef ki başarısız oluyoruz çünkü Decryption gibi bir çözüm yok. Encryption kullanılması gerekiyorsa mutlaka View in kaynak kodlarının başka bir kaynağa yedeklenmesi şiddetle tavsiye edilir.

With Encryption Yapısı

Create View viewAdiWith EncryptionAS

Select Sorgusu

Örnek olarak yukardaki gibi bir View oluşturduğumuzda veritabanındaki Views klasörü içersinden bu yarattığımız View i bulduğumuzda üzerinde bir kilit simgesinin olduğunu göreceğiz ve sağ tık ile düzenlemeye çalıştığımızda başarısız olacağız. Encryption ile kodlarımızı emniyet almış olduk. Daha öncede belirttiğim gibi bunu tekrar geri döndürecek kilidi çözecek bir kod yok.

Oluşturulan view ların içeriklerini görüntülemek için kullandığımız bir stored procedure var. Sp_helptext . bu SP bize belirttiğimiz View içeriğini gösterir. Öncelikle nasıl kullanıldığına bakalım sonra Encrypt ettiğimiz View i görüntüleyebilirmiyiz ona bakalım.

Görüldüğü gibi normal bir view içeriğini görüntüledik. Şimdide Encrypt edilmiş view a bakalım 😉

Schemabinding

Encryption kadar olmasada Schemabinding kelimesinin tercümesi zaten bu kodu hangi amaçlar için kullanabileceğimizi anlamaya yeterli oluyor. Eğer oluşturulacak View içersinde Schemabinding kullanılıyorsa View içersinde kullandığımız tabloların sütunlarını kilitlemiş oluruz. View içersinde Schemabinding kullanırken hatırlamamız gereken bazı kurallar var.

Öncelikli kural Schemabinding kullanacağımız View içersindeki sorgularımızda * işaretini kullanmamak bunun yerine tüm görüntülemek istediğimiz sütunları tek tek yazmamız gerekiyor.  Yazmazsak aşağıdaki gibi bir hata ile karşılaşacağız.

Ayrıca belirteceğimiz tablo isimlerini tabloismi.sütunismi olarak belirtmemiz gerekiyor. Son olarakda tablo ismi ile alakalı olan kuralımız var , tablo isminde ise dbo.tabloismi yazmamız gerekiyor ki tam olarak tabloyu ve sütunlarının yerini garantilemiş olalım.

Yukarıdaki örnekte View’de görüntüleyeceğimiz verilerin bulunduğu tablo ya da tablolardaki sütunların yapısında yapılacak herhangi bir değişikliği bu View’i silmedikçe ya da Schemabinding özelliğini View’imizden kaldırmadıkça yapamayacağız. Oldu da böyle bir işlemi Schemabinding özelliği varken yapmaya kalkıştık, SQL bize bu işlemin yapılamayacağını belirten bir hata mesajı verecektir. UrunleriListele isimli View için kullandığımız dbo.Products tablosundan ProductName sütununu kaldırmaya çalışalım.

WithCheckOption

Son olarakda sizlere View lerin WithcheckOption özelliğinden bahsetmek istiyorum.  Biliyorsunuz ki View ler içersinde tek bir tablo ile işlem yaptığımızda Insert,Update, Delete gibi işlemleri yapabiliyoruz. İşte bu işlemleri yapabildiğimiz view ler içersinde bazı kısıtlama yapabilmek için WithCheckOption özelliğini kullanırız. Yeni bir view ile bu özelliği inceleyelim.

Bu şekilde tek tablo üzerinde ve Where kelimesi ile kriter belirtilerek oluşturduğumuz View üzerine insert işlemi yapmaya kalktığımızda hata ile karşılaşıyoruz.

Umarım yararlı olmuştur sonraki yazılarda görüşmek üzere.

SQL _ Views 150 150 mezo

SQL _ Views

Merhaba arkadaşlar bu yazımızda MSSQL de bulunan View yapısından bahsetmek istiyorum. Bu yazının sonunda View yapısını nasıl yazıldığını ne işe yaradığını öğrenmiş olacaksınız.

View yapılarını bilinenin aksine sadece ihtiyacımız olduğunda kullanmamız işimizi kolaylaştıracağı gibi bizi gereksiz yüktende kurtaracaktır. Yerinde kullanıldığında veritabanında çok daha verimli çalışmalar yapmamızı sağlarlar.

Peki nedir bu view ? View’ler  bir veya birden fazla tablonun istenilen verilerinin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. View leri sanal tablolar olarakda nitelendirebiliriz. Aynı oluşturduğumuz tablolar gibi satır ve sütunlara sahiptir. Birden fazla sütunun birleşerek tek bir komut altında topladığımızı düşünebiliriz. Hatta sadece tek bir tablo ile ilgili bir view oluşturduğumuzda İnsert Update Delete gibi işlemlerinide gerçekleştirebiliriz. View ler için sanal kelimesini kullanıyoruz çünkü üzerinde veri tutmazlar , sadece istenen veriye ulaşılması için bir araçtır aslında. Bir view yazdığımızda ne oluyor acaba ? Bize neler kazandırıyor bir göz atalım.

*İlk olarak birden fazla tablo ile çalışırken gereksiz karmaşadan kurtuluyoruz. Yani ne demek bu ? Biz uzun bir SQL sorgusu yazdığımızda her seferinde bu uzun ve karmaşık kodla uğraşmak yerine bir view işimizi görüyor.

*Bir diğer artısı ise veri ulaşım performansını arttırmak.

*Veri erişimini sınırlamak ve kontrol altında tutmak

View oluştururken dikkat etmemiz gereken hususlar:
Oluşturulan View de;
-Compute ya da Compute By cümleciği,
-Into anahtar sözcüğü,
-Option cümleciği
kullanılamaz.
-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans verilemez. Bu tablolardan veri istenemez.
-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.
-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.
-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir

-Bir view oluşturabilmek için database üzerinde sysadmin (system administrator),  db_owner (database owner), db_ddladmin (data definition language administrator) yetkilerine sahip olmalıyız.

Northwind veritabanını kullanarak örneklerimizi verelim ve bir view nasıl yazılıyor nasıl kullanılıyor görelim 😉

Syntax  olarak

CREATE VIEW [View_Ismi]ASSQL Kodları.

Haydi  sizle önce çok basit bir Select sorgusu sonra karışık bir select sorgusu ile örnek verelim.

Birde karmaşık olana bakalım.

Bu kadar uzun bir kodla ( hatta bundan daha uzunda olabilirdi belki ) her seferinde uğraşmak insanı yorabilir karışıklığa ve hatalara olanak sağlar işte bu karışıklık ve hatalara meydan vermemek için View kullanmalıyız diyoruz.

Kodlarla çok güzel yazdık bu View i peki hiç bilgimiz yoksa kod bilmiyorsak olamazmı ?  O zaman ne yapacağız bu View denen zıkkımı yaratmak için çok basit :

Öncelikle Object explorer penceresinde database imiz içersinde bulunan klasörlerden Views klasörüne sağ tık yapıyoruz ve New View diyoruz.

Ardından bizden hangi tablolarla alakalı çalışma yapmak istediğimizi soruyor bizde istediğimiz tabloları seçiyoruz.

Seçtikten sonra zaten biraz önce uzun uzun yazdığımız kodları bizlere otomatik olarak yazılmış halinin canlı halini getiriyor ekrana tek yapmamız gereken kaydetmek 😀

Basit olarak bir view oluşturma işlemi bu kadar arkadaşlar bir başka makalemizdede bu View in içindekine  , dibindekine , altında yatan koca ayzberge (iceberg) bakacağız

Görüşmek üzere…

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.