Posted by Zafer | Posted in SQL | Posted on 04-12-2008
Sql serverde oluşturduğumuz herhangi bir tablo içinde IDENTITY olarak oluşturulmuş bir alan varsa ve biz buna manuel olarak veri eklemeye çalışırsak “Cannot insert explicit value for identity column in table ‘UsvsPaket’ when IDENTITY_INSERT is set to OFF” hatası ile karşılaşırız. Bu hatayı gidermek için sql cümlemizi aşağıdaki gibi düzenlememiz gerekir :
-
SET IDENTITY_INSERT tabloAdı ON
-
INSERT INTO tabloAdı …..
-
SET IDENTITY_INSERT tabloAdı OFF
bu sayede identity olan alana kendi isteğimiz veriyi ekleyebiliriz. Tabi eklediğimiz veriler identity alandaki değerler ile çakışmamalıdır.
Posted by Zafer | Posted in SQL | Posted on 25-11-2008
İki tarih arasındaki verileri sorgulamak için BETWEEN deyiminden yararlanabiliriz. Bu konuda aklımıza takılan soru genelde başlangıç ve bitiş tarihlerinin yani sınır şartlarınında değerlerdirmeye alınıp alınmadığıdır. BETWEEN ile ilgili sorgularımızda sınırdaki şatlar da değerlendirilir. Fakat bazen tarih aralığını sorgulayan bir fonksiyon ve ya sorgu yazdığımızda sınır şartlarının koşula dahil edilmediğini ve kullandığımız deyimin ya da sorgunun yanlış olduğunu düşünürüz. Fakat sorgumuz ve deyimimiz genelde dogrudur sadece biraz eksiktir. Genelde yaptığımız hatayı bir örnek ile göstermek istiyorum ;
Doğru ama eksik :
-
CREATE FUNCTION [tarihSorgula] (@baslangicTarih datetime,@bitisTarih datetime)
-
RETURNS TABLE AS RETURN
-
(
-
SELECT … FROM …. WHERE tarih BETWEEN tarih @baslangicTarih AND @bitisTarih
-
)
Read the rest of this entry »
Posted by Zafer | Posted in SQL | Posted on 18-11-2008
Query Analyzer ile sorgu ifadelerinizi yazarken bazen sum,count vb ifadelerde dönen sonuçların kolonlarına isim vermeyi aşağıdaki örnekte oldugu gibi unutabiliriz.
-
SELECT ident_current(‘orders’)
Bu gibi durumlarda dönen sonucumuz no column name adı altında bize gösterilir. Fakat bu sql ifadesi oluşturacağımız bir fonksiyon içinde geçecekse , fonksiyonu oluştururken “Create Function failed because a column name is not specified for column 1.” hatası ile karşılaşırız. Yani oluşturacağımız fonksiyonlar bizden kolon isimlerini belirtmemizi isteyecektir.
Çok basit gibi görünen bu hata bazı anlarımızda çok vakit kaybetmemize neden olabilmektedir.
Aşağıda hatalı ve hatasız olmak üzere iki örnek bulunmaktadır ;
Read the rest of this entry »
Posted by Zafer | Posted in SQL | Posted on 14-11-2008
Sql sorgulama dilinde, kullandığımız parametre ve değişkenlere dikkat etmediğiz takdirde bazı güvenlik sorunlarının ortaya çıkmasına sebep olabiliriz. Aşagıdaki linkte ve pdf dosyalarında oluşabilecek bu sorunların neler olduğundan bazıları ve korunma yöntemlerinden bahsedilmektedir.
sql saldırı ve korunma
sql saldırı ve koruma 2
Kaynak: http://www.infosecurenet.com,info@infosecurenet.com,Soner Eker
Posted by Ömer | Posted in SQL | Posted on 10-11-2008
SQL Server Business Intelligence Development Studio kullanarak bir rapor oluşturdunuz ve verileri sıralı şekilde bir tabloda görüntüleyeceksiniz. Veritabanından veriler geldikçe tablo dolup taşacak ve sayfalarca raporunuz olacaktır belki de. Bu durumda görsellik de önemli olacak. Tablo satırlarının ardışık satırların farklı renkte olmasını sağlayabiliriz.
Read the rest of this entry »
Posted by Zafer | Posted in SQL | Posted on 05-11-2008
Bazı durumlarda veritabanına birden fazla kayıdı aynı anda ve tek bir transactionda eklemek isteriz. Bu gibi durumlarda INSERT deyimi ile UNION ALL deyimini ortak kullanarak sorunun üstesinden gelebiliriz .
Kullanım şekli ;
-
INSERT INTO ogrenci (ogrNo,isim,soyisim)
-
-
SELECT 04233013,‘zafer’,‘uğur’
-
-
UNION ALL
-
-
SELECT 04233006,‘fatmana’,‘şentürk’
-
-
UNION ALL
-
-
SELECT 04233020,’sami’,‘beyoğlu’
-
-
UNION ALL
-
-
SELECT 04233025,‘yasin’,‘derer’
gibidir.
Kayıt sayısının fazla olduğu durumlarda işlem süresinin daha da azalmasını sağlayacaktır.
Posted by yasin | Posted in SQL | Posted on 05-11-2008
Vereceğim bilgiler yüksek seviye olmasa da işe yarayacak bilgiler.
Örnekler üzerinden giderek Sql”de geçiçi tablolar, truncate, insert ve bulkcopy hakkında bilgi vereceğim.
Geçici Tablolar
Aşağıdaki kod ile Temp1 isminde geçici bir tablo oluşturduk.
-
SELECT * INTO #Temp1 FROM uyeler
Aşağıdaki kod ile ise geçici tablomuzdaki verilere ulaşabiliriz.
Aşağıdaki kod ile Temp2 isminde bir geçici tablo oluşturduk
-
SELECT * INTO ##Temp2 from uyeler
Yukarıdaki örneklerde dikkat ettiyseniz birinde tek # diğerinde 2 # işareti var bunun anlamı
Sqlserver için tek # local çift # global anlamına gelir yani yarattığımız geçici bir tabloya sadece o pencere içinde ulaşmak için tek
bağlı olan her uygulamadan erişmek için ise çift ## işareti kullanırız.
Temp2′deki verileri listeleeriz.Geçici tablolar systemdatabases altında Temp Db”de oluşur
Geçici tablolarımızı silmek için kodunu kullanırız.
Read the rest of this entry »
Posted by Zafer | Posted in SQL | Posted on 05-11-2008
SQL ‘de sorgu veya tablo sonuçlarını yatay ve düşey olarak birleştirebiliriz. Yatay birleştirmeler için JOIN ifadeleri kullanılırken ,dikey birleşimler için ise UNION deyimi kullanılır.
JOIN İfadeleri:
INNER JOIN :
İki tablo arasında birleştirme işlemi yaparken, tablolardan sadece birinde yer alan kayıt sonuçlarını görmek için kullanılır. Yani ana tabloda yer alan fakat yardımcı tabloda eşleştirmesi bulunmayan kayıtlar sorgu sonucunda gösterilmez.
Read the rest of this entry »
Posted by Zafer | Posted in SQL | Posted on 16-10-2008

Eğer Sql 2005 kullanmaktaysanız ve Sql 2008 ile birlikte gelen , kullanım kolaylığı sağlayan “intellisense” özeliğine sahip olmak istiyorsanız “SQL Tool Belt” adlı programı yükleyerek hızınızı bir kat daha arttırabilirsiniz. Eklentiye bu adresten sahip olabilirsiniz.
Posted by Zafer | Posted in SQL | Posted on 22-09-2008
Önerilmez
-
SELECT DISTINCT product_id, name FROM products pr, purchase pu
-
WHERE pr.product_id = pu.product_id
Önerilir
-
SELECT product_id, name FROM products pr
-
WHERE EXISTS ( SELECT 1 FROM purchase pr WHERE pr.product_id = pu.product_id)
Sorguda gelen kayıtlarda tekrarlı olanları görüntülememek için DISTINCT kullanılır. EXISTS ise bir alt
sorguda gelen kayıtlar içinde istenilenlerin olup olmadığını kontrol eder. DISTINCT, gelen sonuçlarda
tekrarlı olanları belirlemeden önce sıralama yaptığıdan verimsizdir ve bu yüzden de EXISTS tercih
edilmelidir.
Kaynak : SQL Tuning El Kitabı call 7/24