SQL Server Extended Events Nedir?

sql_server_large_logo

SQL Server 2008 R2 versiyonu ile gelen ve SQL Server 2008 R2 sonraki sürümlerde de desteklenip grafiksel arayüze sahip olan bu özellik ile SQL Server sorgularını takip edip performans analizi yapabilir ve deadlock vb. problemleri tespit edip çözüm bulabilirsiniz.
SQL Server’da çok eski versiyonlardan beri kullanılan SQL Server Profiler‘ın performans açısından Extended Events‘e göre dezavantajları olduğu için alternatif olarak kullanıma sunuldu. İlerleryen SQL Server versiyonlarında SQL Server Profiler kaldırılacağı için Microsoft profiler aracı yerine Extended Events kullanılmasını öneriyor.

extented_events

Extended Events özelliğini kullanmak için Management klasörü altında bulunan Extended Events’in içindeki Sessions klasörüne sağ tıklayıp  “New Session Wizard” komutunu seçelim.

new_session_wizard_introduction

Karşımıza gelen bilgi ekranına ufak bir gözatıp Next ile geçtikten sonra bizi Set Session Properties ekranı karşılayıp oluşturacağımız Session için bir isim girmemizi isteyecektir.

set_session_properties

Session Name olarak “Ext_Test_Session” belirttikten sonra “Start the event session at server startup” seçeneğini işaretledim. Bu seçenek sunucu başladığında oluşturmuş olduğumuz session’umuzun otomatik olarak başlayıp başlamayacağını ayarlayabiliyoruz.

choose_template

Next ile devam ettikten sonra bizi bir sonraki ekran olan “Choose Template” ekranı karşılayacaktır. Bu ekranda ihtiyacımız olan hazır template’lerden birisini seçip ilerleyebilir veya seçmeden de ilerleyebiliriz.

Select_Events_To_Capture

Bir sonraki ekran olan “Select Events To Capture” ekranında seçmiş olduğumuz “Template” göre bu ekranın sağ tarafında bulunan “Selected Events” ekranı dolu gelecektir. Eğer template seçmez ise bu bölüm boş geliyor olacaktır. Selected Events ekranı dolu veya boş gelse de Event Library ekranından istediğimiz event’ti Selected Events bölümüne dahi edebiliriz.

Capture_Global_Fields

Bir sonraki ekran olan “Capture Global Fiels” ekranında bütün event’lerde ortak olan alanları bu ekranda dahil edebilir veya çıkartabilirsiniz.

Set_Session_Event_Filters

Bir sonraki ekran olan “Set Session Event Filters” ekranında dinlenecek olan evnet’leri belirli koşullara göre filtreleyebilirsiniz. Ben Veritabanı olarak “TESTDB” veritabanını ve kullanıcı ismi “mesutg” olan eventleri filtreledim.

Specify_Session_Data_Storage

Bir sonraki ekran olan “Specify Session Data Storage” ekranında oluşaçak olan analizi nasıl saklayacağımızı belirleyeceğimiz bir ekran ile karşılaşıyoruz. Bu ekranda oluşan analizi daha sonra incelemek için bir dosyaya kaydetme seçeneği de mevcut.

Summary

Son adımda bizi “Summary” ekranı karşılıyor. Yapmış olduğumuz tüm seçenekleri özet olarak bize sunan bu ekranın sağ altında “Script” butonu yardımı ile grafiksel ekranda yapmış olduğumuz bu işlemlerin t-sql sorgusunu alabiliriz.

script

success

En son adımda event session’umuzun başarıyla oluştuğu bilgisini veren bir ekran bizi karşılıyor. Bu ekranda bulunan “Start the event session immediately after session creation” seçeneğini işaretleyip event session’unumuzu başlatabiliriz.

session_live_data

Oluşturmuş olduğum event’i test etmek için birkaç sorgu yazıp çalıştırdım. Belirtmiş olduğum eventleri ve filtreleri başarıyla çalıştırdı ve koşula uyan sorguların listesini gösterdi.
Not: Extended Events özelliği SQL Server 2008 R2 ile birlikte gelmesine karşın SSMS 2008 sürümünde grafiksel arayüzde sahip değildir. SQL Server 2012 ve üst sürümlerde grafiksel arayüz ile desteklenmiştir.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL SERVER Computed Column Özelliği

sql_server_large_logo

SQL Server‘da Computed Column özelliği tabloda var olan verileri kullanarak yeni bir kolon türetmek için kullanılır. Örneğin; Siparişlerin tutulduğu bir tablo olduğunu varsayalım. Tablomuzda adet ve ürün tutarı tutulmuş olsun. Biz tablomuzda toplam tutar alanına ihtiyacımız olduğunu varsayacak olursak; Toplam Tutar=Adet*Ürün Tutarı olarak hesaplanacaktır.
İhtiyacımız olan alanı hesaplamak için iki farklı yöntem kullanabiliriz. İlk yöntemde “toptam tutar” kolonunu normal bir tabloya kolon ekler gibi ekledikten sonra uygulama katmanında “toplam tutar” değerini hesaplatıp tabloya gönderebiliriz. İkinci yöntemde ise SQL SERVER tarafında kullanabileceğimiz güzel bir özellik olan Computed (Hesaplanmış) kolon özelliğini kullanarak her kayıt eklendiğinde SQL Server tarafından otomatik olarak hesaplanıp bu kolona değeri işleyebiliriz. Konuyu örnek üzerinden inceleyelim.
Sipariş bilgilerinin tutulacağı bir tablo oluşturalım;


CREATE TABLE CustomerOrders
(
OrderID INT IDENTITY(1,1),
CustomerID INT,
Qty INT,
Price DECIMAL(18,2)
)

Yukarıdaki script yardımı ile tablomuzu oluşturmuş olduk. Tablomuza toplam tutar bilgisinin Computed Column olarak tutulması için “Amount” isminde hesaplanmış kolon tanımlıyoruz.

ALTER TABLE CustomerOrders
ADD Amount AS Price*Qty

Yukarıdaki t-sql sorgusunda da görüldüğü gibi tabloya normal bir kolon dahil eder gibi kullanıyoruz ancak veri tipi belirtmek yerine “AS” ifadesi ile hesaplama için kullanılacak formülü belirtiyoruz.

Dikkat: SQL Server’da Computed Column ile oluşturulan kolonlar fiziksel olarak diskte yer kaplamazlar. Ancak hesaplanmış kolonların diskte yer tutmasını fiziksel olarak diske yazılmasını istiyorsanız; “PERSISTED” ifadesini kullabilirsiniz. Yukarıdaki sorguda “PERSISTED” kullanılmadığı için hesaplanan kolon diskte yer tutmayacaktır. “PERSISTED” seçeneğini kullanmak isterseniz sorguyu aşağıdaki gibi düzenlemeniz gerekmektedir.


ALTER TABLE CustomerOrders
ADD Amount AS Price*Qty PERSISTED

computed_column

 

Computed Column olarak oluşturulan alanlar yukarıdaki resimde görüldüğün gibi normal kolon simgesi ile birlikte hesap makinesi simgesi ile temsil edilmektedir.

PERSISTED özelliğini ne zaman kullanmalıyım? diye bir soru aklınıza gelebilir. Eğer verilerinizin diske yazılmasını istiyorsanız ve hesaplanmış kolon üzerinde INDEX tanımlamanız gerekiyorsa “persisted” özelliğini kullanmalısınız.


INSERT INTO CustomerOrders VALUES (1,3,24.50),(1,5,25),(2,2,100)

Computed Column özelliğini test etmek için yukarıdaki script yardımı ile tabloma 3 tane kayıt ekliyorum.

computed_column_result

Eklemiş olduğum kayıtları sorguladığımda “Amount” kolonundaki verilerin benim belirttiğim formüldeki gibi hesaplandığını görüyorum.

Faydalı olması dileğiyle.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL Server – Tablolarda Index Tanımlı Olup Olmadığını Sorgulamak

sqlserver2016

SQL Server’da tablolarda oluşturulan Index‘lerin (Clustered/Non-Clustered) bazı durumlarda T-SQL yardımı ile sorgulanıp var olup olmadıkları bilgisine ihtiyacımız olabilir. Tablolarda oluşturulan index‘lerin nasıl t-sql yardımı ile var olup olmadığına iki farklı yöntem ile gözatalım.

Ben Microsoft‘un örnek veritabanı olan AdventureWorks veritabanında bulunan Production.Product tablosundaki ismini belirtiğim index’lerin var olup olmadığına bakıyor olacağım.Index_have_table

1. Yöntem : Catalog Views yardımı ile index’in tanımlı olup olmadığını sorgulamak

sys.indexes catalog view yardımı ile Clustered ve Non-Clustered index bilgisini sorgulayabiliriz. Ben bu örneğimde Production.Product tablosunda tanımlı olan “PK_Product_ProductID” isimli Clustered index’in t-sql yardımı ile sorgulanmasına bakıyor olacağım.


IF EXISTS (
SELECT 1 FROM sys.indexes I
JOIN sys.tables T ON I.object_id=T.object_id
JOIN sys.schemas S ON S.schema_id=T.schema_id
WHERE I.Name='PK_Product_ProductID' --İndex Adı
AND T.Name='Product' -- Tablo Adı
AND S.Name='Production' -- Şema Adı
)
BEGIN
PRINT 'Index Mevcut'
END
ELSE
BEGIN
PRINT 'Index Mevcut Değil'
END

indexes_find_index_by_name

2. Yöntem : sys.indexes Catalog View ile birlikte OBJECT_ID fonksiyonu kullanımı

Bu yöntemde yine Production.Product tablosunda bulunan “PK_Product_ProductID” isimli Clustered Index’in var olup olmadığını sorgulayacağız. Bu sefer sys.indexes view’i ile birlikte OBJECT_ID fonksiyonunu da kullanıyoruz.


IF EXISTS (
SELECT 1 FROM sys.indexes
WHERE Name='PK_Product_ProductID' --İndex Adı
AND object_id=OBJECT_ID('Production.Product')
)
BEGIN
PRINT 'Index Mevcut'
END
ELSE
BEGIN
PRINT 'Index Mevcut Değil'
END

index_find_by_object_id

Bazı senaryolarda ihtiyacınız olacak olan bu sorgulama yöntemlerinin faydalı olması dileğiyle. Sizlerinde kullanmış olduğu farklı yöntemler var ise yorum panelinden paylaşabilirsiniz.

 

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL SERVER 2016 – STRING_SPLIT Fonksiyonu

sqlserver2016

SQL SERVER 2016 ile birlikte gelen yeni özelliklerden birisi de STRING_SPLIT fonksiyonudur. Genelde veritabanı üzerinde çalışmalar yapanların kullandığı custom string split fonksiyonu vardır. SQL SERVER 2016 ile birlikte kullanımımıza sunulan STRING_SPLIT fonksiyonu ile custom split fonksiyonu oluşturmamıza gerek kalmıyor. Biraz geçte olsa sık kullanılan bir fonksiyonun varsayılan olarak SQL SERVER ile birlikte kullanıma sunulmasına sevindim. SQL SERVER 2016 ile birlikte gelen bu yeni fonksiyonun kullanımını inceleyelim.

SYNTAX: STRING_SPLIT(string,seperator)

String parametresinde kullanılabilecek veri türleri : CHAR,VARCHAR,NVARCHAR,NCHAR

Seperator parametresinde kullanılabilecek veri türleri: CHAR(1),VARCHAR(1),NVARCHAR(1),NCHAR(1)

Not: Seperator parametresinde ayraç olarak gelebilecek değer bir karakter olmak zorundadır.

Fonksiyon sonucunda bize tek kolonlu bir tablo döndürmektedir. Şimdi örnek ile fonksiyonu inceleyelim.

Öncelikle “,” (virgül) ile birbirinden ayrılacak alanları nasıl ayıracağımıza bakalım;


SELECT * FROM STRING_SPLIT('Mesut,Güneş,DBA',',')

string_split

Aynı örneği bu sefer değişken kullanarak yapalım;


DECLARE @str VARCHAR(20)='Mesut,Güneş,DBA'
,@separator CHAR(1)=','
SELECT * FROM STRING_SPLIT(@str,@separator)

sql_server_2016

SQL Server 2016 ile birlikte gelen String_Split fonksiyonu sayesinde, split işlemlerinizi özel bir fonksiyon oluşturmanıza gerek kalmadan rahatça kullanabilirsiniz.

 

Not: Bu örnek SQL Server 2016 RC3 versiyonu ile birlikte hazırlanmıştır.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL Server 2016 – GZIP COMPRESS ve DECOMPRESS Fonksiyonları

sqlserver2016

COMPRESS ve DECOMPRESS SQL Server 2016 ile birlikte gelen yeni fonksiyonlardır. Fonksiyon isimlerinde de anlaşılacağı üzere sıkıştırma ve çözme (sıkıştırılan veriyi açma) fonksiyonlarıdır. Bu makalede her iki fonksiyonun kullanımı inceleyeceğiz.

COMPRESS fonksiyonu kendisine verilen veriyi GZIP algoritması ile sıkıştırarak geriye binary veri türü olan Varbinary(max) veri türü dönüşü yapmaktadır.

DECOMPRESS fonksiyonu GZIP algoritması ile sıkıştırılmış veriyi çözmek/açmak için kullanılır. GZIP algoritması ile sıkıştırılan veri DECOMPRESS fonksiyonu ile geri dönüştürme işlemi sonrası yine COMPRESS fonksiyonunda olduğu gibi Varbinary(max) veri türü dönüşü yapmaktadır. DECOMPRESS edilen veriyi ilk haline, sıkıştırılmadan önceki haline dönüştürmek için “explicit conversion“,”Cast” işlemi yapmamız gerekiyor.
COMPRESS ve DECOMPRESS fonksiyonları standart GZIP algoritmasını kullanmaktadır. Uygulama katmanında veriyi sıkıştırıp SQL Server’a gönderebilir, Sql Server 2016 üzerinde sıkıştırılan veri direk veritabanına yazılabilir veya veri decompress edilip veritabanına yazılabilir. Aynı şekilde Uygulama katmanına sql server üzerinden gelen compress edilmiş veri uygulama katmanı üzerinden decompress edilebilir.

Şimdi örnekler üzerinden bu iki fonksiyonun kullanımına geçelim.


SELECT COMPRESS('Mesut Güneş')

sql_server_compress

Şimdi sıkıştırılan veriyi geri dönüştürmek için DECOMPRESS fonksiyonumuzu kullanalım.


SELECT DECOMPRESS(0x1F8B0800000000000400F34D2D2E2D5170FF9397FA0F004F3025550B000000)

sql_server_Decompress

Sorgu sonucundan da anlaşılacağı gibi DECOMPRESS fonksiyonu da bize binary data döndürdü. Gerçek verimize ulaşmak için sorgu çıktısındaki Binary veriyi cast etmemiz gerekiyor.


SELECT CAST(0x4D657375742047FC6E65FE AS VARCHAR(MAX))

sql_server_cast

Sorgu çıktısında görüldüğü üzere decompress fonksiyonundan gelen verimizi cast işlemin tabi tuttuktan sonra sıkıştırılmamış değerine ulaştık.

Şimdi bir örnek daha yapalım ve makalemizi bitirelim. Bu örnek sorguda tek Select ifadesinde hem Compress hem Decompress fonksiyonlarının kullanımına gözatalım.


DECLARE @CompressValue VARCHAR(MAX) ='MESUT GÜNEŞ'

SELECT @CompressValue AS CompressValue,
COMPRESS(@CompressValue) AS CompressedValue,
DECOMPRESS(COMPRESS(@CompressValue)) AS DeCompressedValue,
CAST(DECOMPRESS(COMPRESS(@CompressValue)) AS VARCHAR(MAX)) AS CASTValue

all_selecct

 

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL Server 2016 – DATEDIFF_BIG Fonksiyonu

sqlserver2016

SQL Server 2016 ile birlikte gelen yeni fonksiyonlardan birisi de DATEDIFF_BIG fonksiyonudur. İki tarih arasındaki farkı bigint türünde geriye döndürür. DATEDIFF fonksiyonu geriye int türünde değer döndüğünden dolayı int türünden daha büyük değerlere ihtiyaç olması durumunda kullanılması için DATEDIFF_BIG fonksiyonu kullanıma sunulmuştur.

DATEDIFF_BIG Syntax : DATEDIFF_BIG( datepart,startdate,enddate )

Kullanımı :


SELECT DATEDIFF_BIG(DAY,GETDATE(),GETDATE()+10) 

datediff_big_example

Bu örnekte DATEDIFF ile DATEDIFF_BIG arasındaki farkı daha iyi anlamak için INT (max=2,147,483,647) veri türünün sınırını geçebilecek bir tarih farkı alalım.


SELECT DATEDIFF(ms,'2016-01-01','2016-01-31')

datediff_overflow

DATEDIFF bize INT (max=2,147,483,647) veri türü döndürdüğü için ve farkını almak istediğimiz zaman bilgisi INT veritürü sınırını geçtiği için overflow hatası meydana geldi.

Şimdi de aynı sorguyu DATEDIFF_BIG fonksiyonu ile çalıştıralım;


SELECT DATEDIFF_BIG(ms,'2016-01-01','2016-01-31')

datediff_big_example_two

Sorgu sonucunda da görüldüğü üzere 1 aylık milisaniye bazındaki tarih farkını DATEDIFF_BIG fonksiyonu ile başarıyla almış olduk.

INT türünde dönüş yapan DATEDIFF fonksiyonu yetersiz kaldığı durumda BIGINT veri türünde dönüş yapan DATEDIFF_BIG fonksiyonunu SQL Server 2016 versiyonu ile bilikte rahatça kullanabilirsiniz.

Genel Bilgi: 

INT veri türü sınırları : -2,147,483,648 ile +2,147,483,647 arasındadır.

BIGINT veri türü sınırları: -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 arasındadır.

Not: Bu içerikte kullanılan SQL Server sürümü :  SQL Server 2016 CTP 3

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

MS Access’te Kullanılan Raporları Reporting Services Raporlarına Dönüştürme

Finance report

Şirketlerde verileri saklamak ve raporlamak için Access veritabanı çok az bir kullanıma sahip olsa da, Microsoft Access veritabanında yapılmış olan raporları Reporting services raporlarına (.rdl) dönüştürme ihtiyacınız olabilir.
Genelde süreç şirket verilerinin tutulduğu Access veritabanı yeterli olmadığında, daha kapsamlı bir veritabanına (SQL Server, Oracle,DB2 vb.) geçiş yapmak istenildiğinde, dataların taşınmasıyla birlikte Access’te kullanılan raporların da tekrar oluşturulması istenilecektir.
Access’te kullanılan tüm raporları tek tek SQL Server Reporting Services üzerinde oluşturmak,dizaynları yapmak zaman/maliyet’e sebep olacak.
Her zamanki gibi işlerimizi hızlandırmamıza,en değerli kaynağımız zamanı değerli kullanmamıza önem veren Microsoft Access’te kullanılan raporların Reporting Services raporlarına dönüştürmemize imkan sağlıyor.

Konuyu uygulamak için yeni bir örnek Access veritabanı oluşturuyorum. MS Access‘i açtıktan sonra ; New > Sample Templates yolu ile Access’in bize sunduğu örnek veritabanlarından “Marketing Projects” veritabanını tercih edip oluşturuyorum.

create_Access_sample_database

Oluşturmuş olduğumuz veritabanı içerisinde kullanılan raporlar da bulunuyor.

sample_Report

Artık veritabanımız ve içerisinde kullanılan raporlarda olduğuna göre bu raporları SSRS raporlarına dönüştürebiliriz.

Visual Studio’yu çalıştırdıktan sonra File>New>Project menüsü ile yeni bir rapor projesi oluşturalım.

create_report_project

Sağ tarafta bulunan Business Intelligence > Reporting Services  seçtikten sonra Report Server Project seçip projemizi oluşturuyoruz.  Projemiz oluştuktan sonra, Access veritabanı içerisinde bulunan raporları “.rdl” dönüştürmek için; Project menüsünden Import Reports> Microsoft Access… menü yolu ile açılan penreceden raporları alacağımız Access dosyasını seçiyoruz.

Access dosyamızı seçtikten sonra Visual Studio otomatik olarak raporları SQL Server Reporting Services raporlarına dönüştürmeye başlayacaktır.

reports_solution_explorer

Access veritabanında bulunan bütün raporlar Solution Explorer penceresindeki ImportAccessReport projemizin Reports klasörü altına eklendiğini görüyoruz.

report_design

Aktarmış olduğumuz raporları incelediğimizde dizaynların  birebir aktarıldığını görüyoruz. Dizaynlarla birlikte raporların datasource ve dataset’lerinin de yeni rapor sistemine aktarıldığını görüyoruz.

data_Source_dataset

Kolay ve hızlıca Access veritabanında bulunan raporları Reporting Services raporlarına dönüştürmüş olduk.

Faydalı olması dileğiyle.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL Server 2016 – DROP IF EXISTS

sql_server

SQL Server 2016 ile gelen yeniliklerden, IF EXISTS koşulu DROP komutu ile birlikte opsiyonel olarak kullanılabilir hale geldi. Basitçe IF EXISTS belirtilen nesnenin var olup olmadığı bilgisini döndüren bir komuttur.
SQL Server 2016 ile birlikte gelen bu komutun sözdizimi aşağıdaki gibidir;

DROP OBJECT_TYPE [IF EXISTS] OBJECT_NAME

Örnek olması açısından aşağıdaki gibi bir veritabanı,tablo ve stored procedure oluşturuyorum.


CREATE DATABASE SQLNews
GO
USE SQLNews
GO
CREATE TABLE cdUsers (Id INT,Name varchar(50))
GO
CREATE PROC SayHello
AS
SELECT 'Hello SQL Server 2016'
GO

create_database

Oluşturmuş olduğumuz “SayHello” sp’mizi SQL Server 2016 ile birlikte gelen kullanım şekli ile siliyoruz.


DROP PROCEDURE IF EXISTS SayHello

drop_procedure

SQL Server 2016 öncesi sürümlerinde yukarıdaki işlemleri aşağıdaki yöntemle yapabiliyoruz.


IF OBJECT_ID('SQLNews.dbo.SayHello') IS NOT NULL
BEGIN
DROP PROCEDURE SayHello
END

drop_procedure_last

SQL Server 2016 öncesi sürümlerinde IF EXISTS ile bir Stored Procedure‘nin var olup olmadığını bulmak istersek;


IF EXISTS (SELECT 1 FROM sys.procedures WHERE Name='SayHello')
BEGIN
DROP PROCEDURE SayHello
END

drop_procedure_exists

Yukarıdaki stored procedure örneklerinde olduğu gibi aynı şekilde Tablo,View,Database vb. diğer nesneleri de IF EXISTS komutunu kullanarak silebilirsiniz.


DROP TABLE IF EXISTS cdUsers

drop_table


USE master
GO
DROP DATABASE IF EXISTS SQLNews

drop_database

Tavsiye

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL SERVER – QUOTED_IDENTIFIER ON/OFF

SQL-Server-2012

SQL Server’da QUOTED_IDENTIFIER özelliği ile SQL Server için ayrılmış özel kelimeleri kullanarak nesne oluşturmamıza imkan sağlar. “Table,Group,Alter” vb. SQL Server için rezerve edilmiş kelimeleri kullanmamıza imkan sağlayan bir özelliktir.
SQL SERVER için rezerve edilen kelimelerin listesi için : msdn

SQL Server QUOTED_IDENTIFIER özelliği varsayılan olarak açık (ON) durumdadır. Özelliğin daha iyi anlaşılması için bu özelliği önce kapatıp (OFF) data sonra SQL server için rezerve edilmiş bir kelime ile tablo oluşturmaya çalışacağım.


SET QUOTED_IDENTIFIER OFF

CREATE TABLE "TABLE"
(
"int" int,
"datetime" datetime
)

QUOTED_IDENTIFIER_OFF

QUOTED_IDENTIFIER özelliği kapalı iken bize Sql Server için rezerve edilmeş kelime ile tablo oluşturmamıza izin vermiyor. QUOTED_IDENTIFIER özellğini açıp tekrar deneyelim.


SET QUOTED_IDENTIFIER ON

CREATE TABLE "TABLE"
(
"int" int,
"datetime" datetime
)

QUOTED_IDENTIFIER_ON

QUOTED_IDENTIFIER özelliğini açtıktan sonra Sql Server için rezerve edilen kelime olan “TABLE” kelimesi ile tablo oluşturmamıza imkan sağlamıştır.  Dikkat ettiyseniz tablodak kolon isimlerini de veri türü ismi ile aynı olacak şekilde kullanmamıza da imkan sağlıyor. Şimdi rezerve edilen bir kelime ile oluşturmuş olduğumuz tabloya kayıt ekleyip sorgulayalım.


SET QUOTED_IDENTIFIER ON

INSERT INTO "TABLE" VALUES(1,GETDATE())

SELECT * FROM "TABLE"

QUOTED_IDENTIFIER_INSERT_SELECT

Oluşturduğumuz tablomuza kayıt ekleyip sorgulama işlemini gerçekleştirdik. Genelde SQL Server için rezerve edilen kelimeler ile tablo oluşturup projenizde kullanmak istemezsiniz.  Yine de böyle bir özelliğin olduğunu bilmeniz faydalı olacaktır.

NOT: QUOTED_IDENTIFIER özelliği varsayılan olarak ON durumundadır.

EK Bilgi: QUOTED_IDENTIFIER  özelliği ile çift tırnak kullanarak SQL Server için rezerve edilmiş kelimeleri kullanmamıza imkan sağlıyor. QUOTED_IDENTIFIER  özelliği ON / OFF farketmeksizin rezerve edilmiş kelimeleri kullanmak isterseniz “[ ]” kullanabilirsiniz.


CREATE TABLE [TABLE]
(
[int] int,
[datetime] datetime
)

INSERT INTO [TABLE] VALUES (1,GETDATE())

SELECT * FROM [TABLE]

create_table

Faydası olması dileğiyle.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page

SQL SERVER’de Veritabanının Var Olup Olmadığını Sorgulamak – 3 Yöntem

SQL-Server-2012

Bazı durumlarda SQL SERVER‘da kullanmak istediğiniz veritabanını var olup olmadığını sorgulama ihtiyacı duyabilirsiniz. Ben yazılım geliştirdiğim dönemlerde uygulama tarafında SQL SERVER‘da uygulamanın kullanmakta olduğu veritabanının olup olmadığını sorgulayıp koşula göre eğer veritabanı yoksa oluşturup varsa güncelleme scriptlerimi çalıştırıyordum. Bunun gibi birçok durumda SQL SERVER üzerinden bir veritabanının var olup olmadığını sorgulama ihtiyacınız doğabilir.
Araştırmalarım sonucu veritabanının SQL SERVER tarafında var olup olmadığını sorgulamak için üç farklı yöntem buldum. Sırası ile bu yöntemleri sizlerle paylaşıyorum.
Sizlerde kullandığınız farklı bir yöntem varsa yorup panelinden bizlerle paylaşabilirsiniz.

1.Yöntem DB_ID() Fonksiyon Kullanımı
Benimde kullandığım DB_ID() fonksiyonu kullanımı kolay ve akılda kalıcı olduğu için tavsiye ederim.


IF DB_ID('AdventureWorks2014') IS NOT NULL
BEGIN
PRINT 'DB Mevcut'
END
ELSE
BEGIN
PRINT 'DB Bulunamadı'
END

db_exists

db_not_exists

2.Yöntem sys.databases View Kullanımı
Bu yöntemde MASTER veritabanında bulunan Sistem View’leri altında sys.databases view’ini sorgulayarak veritabanının var olup olmadığı bilgisine ulaşabiliriz.


IF EXISTS(SELECT * FROM master.sys.databases WHERE name='AdventureWorks2014')
BEGIN
PRINT 'DB Mevcut'
END
ELSE
BEGIN
PRINT 'DB Bulunamadı'
END

sys_databases

3.Yöntem sys.sysdatabases Tablosu Kullanımı
Bu yöntemde de aynı 2. yöntemde olduğu gibi sorgulama yaparak veritabanının var olup olmadığını tespit edeceğiz. 2. yöntemde Master veritabanında bulunun sistem view’ini kullandık, bu yöntemde de yine Master veritabanında olan sistem tablosunu kullanıyoruz.


IF EXISTS(SELECT * FROM master.sys.sysdatabases WHERE name='AdventureWorks2016')
BEGIN
PRINT 'DB Mevcut'
END
ELSE
BEGIN
PRINT 'DB Bulunamadı'
END

master_sysdatabases

master_sysdatabases_not_exists

Yararlı olması dileklerimle.

Sosyal medyada paylaş...Share on FacebookShare on LinkedInShare on Google+Pin on PinterestShare on TumblrTweet about this on TwitterEmail this to someonePrint this page