Sql Server’da Identity kolon içeren tablolar ile çalışırken, yeni üretilen identity değerine ihtiyacımız olur.
@@IDENTITY, SCOPE_IDENTITY() ve IDENT_CURRENT() aynı işi farklı yöntemlerle yapar; son üretilen identity değerini döndürmek.
SELECT @@IDENTITY Açılmış olan bağlantıda son üretilen identity değerini döndürür. @@IDENTITY tablo ve scope bakmaksızın, connection’da üretilen son identity’yi verir. Dikkat : Eğer Insert yaptığınız tablo’da Trigger varsa, yanlış identity alabilirsiniz.
SELECT SCOPE_IDENTITY() Açılmış olan bağlantıda ve sorgunun çalıştığı scope’ta son üretilen identity’yi döndürür. Trigger kullanılan tablolarda @@IDENTITY yerine SCOPE_IDENTITY() kullanılması tavsiye edilir.
SELECT IDENT_CURRENT(tablename) Bağlantı ve scope bakmaksızın, parametre olarak verilen tabloda üretilen son identity değerini döndürür.
Örnek;
CREATE TABLE TEST_TABLO_1 ( ID INT NOT NULL IDENTITY (1, 1), ACIKLAMA VARCHAR(500) NULL, BILGI VARCHAR(1000) NULL )
CREATE TABLE TEST_TABLO_2 ( ID INT NOT NULL IDENTITY (1, 1), ACIKLAMA VARCHAR(500) NULL, EKSTRA_BILGI VARCHAR(1000) NULL )
GO
CREATE TRIGGER TRG_TEST ON TEST_TABLO_1 FOR INSERT AS INSERT INTO TEST_TABLO_2 (ACIKLAMA, EKSTRA_BILGI) VALUES (‘Açıklama’, ‘Extra Bilgi’)
GO
INSERT INTO TEST_TABLO_2 (ACIKLAMA, EKSTRA_BILGI) VALUES (‘DENEME’, ‘TEST1’) INSERT INTO TEST_TABLO_2 (ACIKLAMA, EKSTRA_BILGI) VALUES (‘DENEME’, ‘TEST2’) INSERT INTO TEST_TABLO_2 (ACIKLAMA, EKSTRA_BILGI) VALUES (‘DENEME’, ‘TEST3’) INSERT INTO TEST_TABLO_2 (ACIKLAMA, EKSTRA_BILGI) VALUES (‘DENEME’, ‘TEST4’)
INSERT INTO TEST_TABLO_1 (ACIKLAMA, BILGI) VALUES (‘DENEME’, ‘TEST1’)
SELECT @@IDENTITY UNION ALL SELECT SCOPE_IDENTITY() UNION ALL SELECT IDENT_CURRENT(‘TEST_TABLO_1’)
GO
DROP TRIGGER TRG_TEST DROP TABLE TEST_TABLO_1 DROP TABLE TEST_TABLO_2
Sorgunun çıktısı;
Gördüğünüz gibi, SELECT @@IDENTITY çalışan Trigger’dan etkilenerek yanlış sonucu döndürmüştür.
TEST_TABLO_2‘ye ilk eklediğimiz kayıtta, identity olarak 5 aldık.
**SELECT **SCOPE_IDENTITY() ise, doğru değer (1) döndürdü.
ClickOnce ile deploy ettiğiniz uygulamanızda, programatik olarak güncelleme olup olmadığını kontrol etmek istiyorsunuz.
Hangi class’tan örnek oluşturmanız lazım?
Doğru cevap: ApplicationDeployment class’ı olacak.
Assembly class’ını, başka assembly’leri hafızaya yüklemek için kullanırız.
Module class’ını, module’ler üzerinde reflection uygulamak için kullanırız.
DeploymentServiceCom class’ı .Net Framework kütüphanesinin kendisi tarafından kullanılmak üzere yazılmıştır. Direk olarak bizim tarafımızdan kullanılmaması gerekir.
ApplicationDeployment class’ı, ClickOnce ile deploy ettiğimiz uygulamalarda, güncel versiyon yayınlanıp yayınlanmadığını programatik olarak kontrol edebilir.
MSDN’de yer alan şu sayfada ApplicationDeployment class’ı hakkında detaylı bilgiye ulaşabilirsiniz.
Özellikle katalog tablolarının CSV çıktılarına sıklıkla ihtiyaç duyarız. Aşağıdaki sql script’ini kullanarak, siz de tablolarınızdan CSV çıktı alabilirsiniz.
Öncelikle tablomuzun orjinal haline bakalım;
SELECT Name FROM HumanResources.Shift WITH (NOLOCK)</pre>
Şimdi öyle bir sql sorgusu yazacağız ki, çıktımız şu şekilde olacak;
Day, Evening, Night
SELECT SUBSTRING(( SELECT ', ' + Name FROM HumanResources.Shift WITH (NOLOCK) FOR XML PATH('') ), 3, 8000) AS CSV
Sorguyu FOR XML anahtar kelimeleri ile çalıştırdığımıza ve PATH olarak ‘’ (boş string) verdiğimize dikkat edin.
SELECT ', ' + Name FROM HumanResources.Shift WITH (NOLOCK) FOR XML PATH('') Böylece aşağıdaki sonucu elde etmiş olduk; ![sql-csv-output_2](/assets/uploads/2009/11/sql-csv-output_2.png "sql-csv-output_2") Son olarak, sql sorgusunu SUBSTRING fonksiyonu içerisine koyduk, böylece baştaki virgül ve boşluk karakterlerinden (", ") kurtulmuş olduk. ![sql-csv-output_3](/assets/uploads/2009/11/sql-csv-output_3.png "sql-csv-output_3")
Sql Server’ın çalıştığı sunucu ile ilgili özellik bilgilerine sorgu ile erişmek istediğimizde kullanabileceğimiz bir fonksiyon var;
SERVERPROPERTY ( *propertyname *)
Örnek;
SELECT SERVERPROPERTY(‘edition’) AS SURUM, SERVERPROPERTY(‘productlevel’) AS SEVIYE, SERVERPROPERTY(‘productversion’) AS VERSIYON, SERVERPROPERTY(‘servername’) AS SUNUCU_ADI
SERVERPROPERTY fonksiyonunun alabileceği tüm propertyname parametreleri ve açıklamaları için şuradaki MSDN sayfasına bakınız.
Silverlight 3 ve öncesi versiyonlarda, yazı alanına sığmayan metinleri, üç nokta ekleyerek trim etmek için, kendi kontrolümüzü yazmamız gerekiyordu.
Mesela, elimizde şöyle uzun bir yazı olsun;
Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience.
Bu yazıyı, 250px’lik bir metin alanında göstermemiz lazım, ama sığmayan kısımları yanyana üç nokta ile göstermemiz gerekiyor.
Silverlight helps you create rich web applications …
Silverlight 4 versiyonundan önce, bu isteğimizi yerine getirmek için, kendi TextBlock kontrolümüzü yazmamız gerekirdi.
Silverlight 4 versiyonla birlikte ise, TextBlock kontrolünün TextTrimming=”WordEllipsis” özelliğini kullanabiliyoruz.
Örnek kod:
<TextBlock FontSize=”16” TextTrimming=”WordEllipsis” Width=”250” Text=”Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience.” />
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484