Bir öğrencimin isteği üzerine yayınlıyorum! İyi Çalışmalar..
/*Amaç birden fazla kategoriye dahil edilebilen bir ürün kategorilendirme sisteminde
hangi üsünün hangi kategoriye ait olduğunu ve hangi kategoriye ait olmadığını bulmak!*/
--> Tablolarımız :
CREATE TABLE [dbo].[TBLCategories](
[CategoryID] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](50) NULL,
[RegisterDate] [datetime] NULL,
CONSTRAINT [PK_TBLCategories] PRIMARY KEY CLUSTERED
(
[CategoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[TBLCategories] ADD CONSTRAINT [DF_TBLCategories_RegisterDate] DEFAULT (getdate()) FOR [RegisterDate]
GO
CREATE TABLE [dbo].[TBLProducts](
[ProductID] [int] IDENTITY(1,1) NOT NULL,
[ProductName] [varchar](50) NULL,
[Price] [money] NULL,
[RegisterDate] [datetime] NULL,
CONSTRAINT [PK_TBLProducts] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[TBLProducts] ADD CONSTRAINT [DF_TBLProducts_RegisterDate] DEFAULT (getdate()) FOR [RegisterDate]
GO
CREATE TABLE [dbo].[TBLJoinProductCategory](
[JoinID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NULL,
[CategoryID] [int] NULL,
[RegisterDate] [datetime] NULL,
CONSTRAINT [PK_TBLJoinProductCetegory] PRIMARY KEY CLUSTERED
(
[JoinID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBLJoinProductCategory] ADD CONSTRAINT [DF_TBLJoinProductCetegory_RegisterDate] DEFAULT (getdate()) FOR [RegisterDate]
GO
--> Şimdi İstediğimiz sorguları yazalım!!
-- Öncelikli olarak LEFT OUTER JOIN anahtar kelimesi kullanmadan sonuç alalım!
-- Mouse Ürünü İçin!!
-- Bulunduğu Kategorileri Bulmakselect P.ProductName as 'Ürün Adı', CAT.CategoryID as 'Kategori ID', CAT.CatName as 'Bulunduğu Kategori'
from TBLJoinProductCategory JT , TBLCategories CAT, TBLProducts P
where P.ProductName='Mouse' and JT.CategoryID=CAT.CategoryID and JT.ProductID=P.ProductID
--Bulunmadığı Kategorileri Bulmakselect P.ProductName as 'Ürün Adı', CAT.CategoryID as 'Kategori ID', CAT.CatName as 'Bulunmadığı Kategori'
from TBLCategories CAT,TBLProducts P
where P.ProductName='Mouse' and CAT.CategoryID not in
(
select JT.CategoryID from TBLCategories CAT,TBLProducts P, TBLJoinProductCategory JT
where JT.CategoryID=CAT.CategoryID and P.ProductID=JT.ProductID and P.ProductName='Mouse'
)
--> Şimdide LEFT OUTER JOIN anahtar Kelimesiyle yapalım!
--Bu işlemleri Left Outer Join yada Right Outer Join İlede Yapabilirsiniz! select * from TBLCategories CAT left outer join TBLJoinProductCategory JT
on
JT.CategoryID=CAT.CategoryID and JT.ProductID=1
--> Product ID si 1 olan ürün için null olan yerler Bizim istediğimiz sonuçlar!
select CAT.CategoryID as 'Kategori ID',CAT.CatName as 'Bulunmadığı Kategori' from TBLCategories CAT left outer join TBLJoinProductCategory JT
on
JT.CategoryID=CAT.CategoryID and JT.ProductID=1 where JT.CategoryID is null
--> Yukarıdaki sorguya göre bulunmadığı kategorilerin ID numaraları ve İsimleri!
/* Yukarıda "Left outer join" anahtar kelimesi ile birleştirilmiş va herhangi bir join anahtar
kelimesi kullanmadan birleştirilmiş tablolardan dönen sonuçlar var.
İki sonuçta istediğimiz sonuç fakat "Left outer join" ile yaptığın birleştirme her zaman daha
efektif bir sonuç verecektir!. Hızlı olacaktır!
İyi Çalışmalar
Ali Emrah PEKESEN */
table etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
table etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
6 Nisan 2011 Çarşamba
19 Temmuz 2010 Pazartesi
SQL Server ' da "Truncate Table" İfadesi Ne İşe Yarar?
Merhabalar,
Bu ifadedeyi az evvel bir uygulama esnasında kullanıyordum ve aklıma gfeldi sizlerede yararı dokunabilir diye buraya açıklamak istedim.
Truncate ifadesi ne iş yapar?
Truncate yaptığı işe bakılırsa, tabloyu drop etmeden içindeki tüm verileri silmeye yarar. Şimdi bazılarınızın aklına şu sopru gelebilir :
E zaten Delete bu iş için kullanılmıyor mu?
örn : "delete from XXX" (where ifadesi olmadan kullanılırsa evet tablodaki tüm verileri siler!!
Ama burada dikkat etmemiz gereken iki önemli nokta var. Hemde gerçekten çok önemli!!
Delete ile yaptığımız bu işlemde en son kaydımızın ID numarasının 250 olduğunu varsayalım. Tablodaki tüm verileri sildik ama yeni bir kayıt eklemek istediğimizde ID numarası 251 olacaktır. Ve bunu istemeyiz!!
Ayrıca en önemlisi, varsayalımki siz ilgili tablodan bir kayıt silindiğinde bi iş gerçekleşmesi için bir trigger yazdınız ve 250 kayıt silindi, dolayısıyla 250 kere bu trigger çalışacaktır.
Fakat TRUNCATE kullandığımızda tablomuzda ID numaralarınız tekrardan 1den başlayacak şekilde temizlenecektir ve hiç bir trigger bizi farkedemeyecek dolayısıyla tetiklenmeyecektir.
Aradaki farkları net ifade ettim sanıyorum..
Bu arada kullanımına örnek verecek olursak : "truncate table XTable"
Bu ifadedeyi az evvel bir uygulama esnasında kullanıyordum ve aklıma gfeldi sizlerede yararı dokunabilir diye buraya açıklamak istedim.
Truncate ifadesi ne iş yapar?
Truncate yaptığı işe bakılırsa, tabloyu drop etmeden içindeki tüm verileri silmeye yarar. Şimdi bazılarınızın aklına şu sopru gelebilir :
E zaten Delete bu iş için kullanılmıyor mu?
örn : "delete from XXX" (where ifadesi olmadan kullanılırsa evet tablodaki tüm verileri siler!!
Ama burada dikkat etmemiz gereken iki önemli nokta var. Hemde gerçekten çok önemli!!
Delete ile yaptığımız bu işlemde en son kaydımızın ID numarasının 250 olduğunu varsayalım. Tablodaki tüm verileri sildik ama yeni bir kayıt eklemek istediğimizde ID numarası 251 olacaktır. Ve bunu istemeyiz!!
Ayrıca en önemlisi, varsayalımki siz ilgili tablodan bir kayıt silindiğinde bi iş gerçekleşmesi için bir trigger yazdınız ve 250 kayıt silindi, dolayısıyla 250 kere bu trigger çalışacaktır.
Fakat TRUNCATE kullandığımızda tablomuzda ID numaralarınız tekrardan 1den başlayacak şekilde temizlenecektir ve hiç bir trigger bizi farkedemeyecek dolayısıyla tetiklenmeyecektir.
Aradaki farkları net ifade ettim sanıyorum..
Bu arada kullanımına örnek verecek olursak : "truncate table XTable"
Method İçerisinde Eval() Kullanmak!
Arkadaşlar bazen Evalden dönen değeri belli işlemlerden geçirdikten sonra ekrana yazdırmak isteriz. Örneğin bir tablodan dönen firmaID değerini ekrana ID olarak yazdırmamız saçma olacaktır. O esnada ID numarasına denk gelen Firma adını ilgili tablodan çektirmek isteriz. ve bunun için Code Behind tarafında bir method tanımlarız. Evalden aldığımız değeride bu methoda Parametre olarak yollarız. ve çıktıyı istediğimiz şekilde alabiliriz.
Örneği inceleyerek ne kadar kolay olduğunu görebilirsiniz..
Önce methodumuzu yazalım..
Şimdide aspx sayfamızda evalden aldığımız değeri method içine atıp geri dönen değeri nasıl alacağımızı görelim..
Bu kadar basit..
Örneği inceleyerek ne kadar kolay olduğunu görebilirsiniz..
Önce methodumuzu yazalım..
Şimdide aspx sayfamızda evalden aldığımız değeri method içine atıp geri dönen değeri nasıl alacağımızı görelim..
Bu kadar basit..
SQL Server'da "SET NOCOUNT ON" Ne İşe Yarar..
Bildiğimiz gibi SQL serverda herhangi bir tablo üzerinde bir manipulasyon yaptığımızda
-insert,update,delete,select- ( Herhangi bir tanesi olması yeterli!)
"X rows affected." Şeklinde bir mesaj alırız. Bu mesaj SQL server üzerinde yapılan işlemden sonra kaç satırın etkilendiğinin sayılması ardından bize dönen mesajdır.
Fakat çok sayıda satırın etkilendiği durumlarda, bu binlerce hatta milyonlarca olabilir, etkilenen satırların teker teker sayılıp bize bu sonucun döndürülmesi pek isteyeceğimiz bişey olmayacaktır performans açısından. Dolayısıyla bu özelliği kapatmak isteyebiliriz.
Bunun için yazdığımız sorgunun üstüne "SET NOCOUNT ON" yazmamız yeterlidir. Aksini istersekte tahmin edebileceğiniz gibi "SET NOCOUNT OFF" yazarız.
Şimdi bu durumları örnekleyerek daha iyi anlayalım..
Tablomuzda herhangi bir ayar yapmazsak satır sayma özelliği aktif olarak gelecektir. ..
SET NOCOUNT Özelliğini ON Yaptığımızda Aldığımız Sonuç..
Özelliği Tekrar OFF Hale getirdiğimizde , sorguyu tekrar çalıştırtıyoruz ve aldığımız sonuç yine satırların sayıldığını gösteriyor..
Umarım Anlaşılır bir açıklama olmuştur..
-insert,update,delete,select- ( Herhangi bir tanesi olması yeterli!)
"X rows affected." Şeklinde bir mesaj alırız. Bu mesaj SQL server üzerinde yapılan işlemden sonra kaç satırın etkilendiğinin sayılması ardından bize dönen mesajdır.
Fakat çok sayıda satırın etkilendiği durumlarda, bu binlerce hatta milyonlarca olabilir, etkilenen satırların teker teker sayılıp bize bu sonucun döndürülmesi pek isteyeceğimiz bişey olmayacaktır performans açısından. Dolayısıyla bu özelliği kapatmak isteyebiliriz.
Bunun için yazdığımız sorgunun üstüne "SET NOCOUNT ON" yazmamız yeterlidir. Aksini istersekte tahmin edebileceğiniz gibi "SET NOCOUNT OFF" yazarız.
Şimdi bu durumları örnekleyerek daha iyi anlayalım..
Tablomuzda herhangi bir ayar yapmazsak satır sayma özelliği aktif olarak gelecektir. ..
SET NOCOUNT Özelliğini ON Yaptığımızda Aldığımız Sonuç..
Özelliği Tekrar OFF Hale getirdiğimizde , sorguyu tekrar çalıştırtıyoruz ve aldığımız sonuç yine satırların sayıldığını gösteriyor..
Umarım Anlaşılır bir açıklama olmuştur..
1 Temmuz 2010 Perşembe
Alanlarla Bağlantılı Trigger...
Bugün işyerimde çalışırken bi arkadaş geldi ve bir tablodaki belirli bir veri alanında güncelleme olduğu anda başka bir tablodaki bir alanada aynı veriyi yazdırmak istiyorum dedi..
Benim aklıma gelen en basit mantık, bir tablodaki bir alan güncellendiğinde diğer bir tablodada bir alanı güncelleyecek bir trigger yaratmak oldu.
Aşağıdaki örnekte TBL1 Tablosundaki herhangi bir kaydın EFATURA alanı güncellenince otomatik olarak
TBL2 tablosundaki EFATURA alanlarıda TBL1 deki tablodakilerin aynısı olarak güncelleniyor.
Kısa bir örnek belki işinize yarar..
Benim aklıma gelen en basit mantık, bir tablodaki bir alan güncellendiğinde diğer bir tablodada bir alanı güncelleyecek bir trigger yaratmak oldu.
Aşağıdaki örnekte TBL1 Tablosundaki herhangi bir kaydın EFATURA alanı güncellenince otomatik olarak
TBL2 tablosundaki EFATURA alanlarıda TBL1 deki tablodakilerin aynısı olarak güncelleniyor.
Kısa bir örnek belki işinize yarar..
Kaydol:
Kayıtlar (Atom)





