Transact-SQL (T-SQL) bir uzantısı sahibidir Sybase ve Microsoft dil SQL . Transact-SQL, orijinal olarak Sybase şirketi tarafından, aynı adlı veritabanı motorunun en eski sürümlerinden geliştirildi. Oracle'ın PL / SQL'ine benzer şekilde, Transact-SQL, "depolanmış prosedürler" adı verilen programlar aracılığıyla DBMS'nin temel işlevselliğini genişletme araçları sağladı. Kaynak kodu bir yandan kaynak kodu, diğer yandan derlenen kod dosya sistemi dosyalarında depolanan klasik programlama dilinde yazılmış programların aksine, derlenen kaynak kodu aslında veritabanında saklanır.
Microsoft, yazılım teklifini ilişkisel bir DBMS içerecek şekilde genişletmek istediğinde, o zamanki oyunculardan biriyle, özellikle Oracle, RTI Ingres, Informix: Sybase'in arkasındaki rakiple anlaşmalar yaptı. Sybase DBMS, Windows'a taşındı. Microsoft, ilişkisel DBMS konusunda kademeli olarak know-how edinmiş ve Sybase türünden kendi veritabanı motoru olan Microsoft SQL Server'ı geliştirmiştir. Sybase, o zamandan beri Adaptive Server Enterprise haline gelen DBMS'sini geliştirdi . Bu nedenle Transact-SQL, bugün hem Microsoft SQL Server hem de Sybase Adaptive Server Enterprise DBMS ile ilişkili programlama dilidir .
SQL ile karşılaştırıldığında, T-SQL aşağıdaki özellikleri ekler:
Prosedürel programlama yönergelerinin temel anahtar bitleri Transact-SQL vardır BEGINve END, BREAK, CONTINUE, GOTO, IFve ELSE, RETURN, WAITFOR, ve WHILE.
IFve ELSEkoşullu infazlara izin verin. Aşağıdaki örnekte, D-günü hafta sonuna aitse "Hafta sonundayız", haftanın bir günü için "Haftadayız" gösterilecektir.
IF DATEPART(dw, GETDATE()) = 6 OR DATEPART(dw, GETDATE()) = 7 PRINT 'Nous sommes en week-end.' ELSE PRINT 'Nous sommes en semaine.'BEGINve ENDbir talimat bloğunu sınırlandırın. Bir koşullu blokta birden fazla talimat gerekiyorsa, BEGIN ve END kullanmalısınız:
IF DATEPART(dw, GETDATE()) = 6 OR DATEPART(dw, GETDATE()) = 7 BEGIN PRINT 'Nous sommes en week-end.' PRINT 'Faites une pause !' END ELSE BEGIN PRINT 'Nous sommes en semaine.' PRINT 'Vite, au boulot !' ENDWAITFOR belirli bir saat veya günün belirli bir anını beklerken prosedürün ertelenmesine izin verecektir.
RETURNsaklı yordamın yürütülmesini hemen sonlandırmak veya bir işlevin sonucunu döndürmek için kullanılır.
BREAKbir döngüde blok sona erecek WHILEise, CONTINUEgüçleri döngünün ve yeni bir deneme yapmak için.
Transact-SQL, klasik aritmetik operatörlerin kullanımına izin verir.
Yerel değişkenler genellikle döngülerde WHILEveya tip bloklarında sayaç olarak kullanılır IF ... ELSE. Komutlarda veya saklı prosedürlerde kullanılabilirler . Prosedür, çalıştırıldığında bu değişkenleri otomatik olarak ve etkileşimsiz olarak kullanır. Yerel değişkenler, Transact-SQL sözdiziminin bir ifadenin kullanılmasını gerektirdiği her yerde kullanılabilir .
Deklarasyon yerel değişkenlerin benzer olan klasik şart dillerde . Aşağıdaki sözdizimini izler:
declare @nom_variable type_données [, @nom_variable type_données]...Örnekler:
declare @a int declare @b char(20) declare @c floatVEYA
declare @a int, @b char(20), @c floatİkinci sözdizimi, bellek ve performans açısından daha verimlidir.
Yerel bir değişkene değer atayan bir alt rutin yalnızca bir değer döndürmelidir.
Örnekler:
declare @veryhigh money select @veryhigh = max(price) from titles if @veryhigh > $20 print "Aïe!"Yerel değişkenler, bildirildiğinde başlangıçta NULL olur. Ayrıca bir SELECT komutundan NULL olabilirler. NULL özel bir değer olduğundan, NULL değerine sahip değişkenler ile diğer NULL değerler arasındaki karşılaştırma aşağıdaki tabloda özetlenen özel kuralları izlemelidir.
İfade bir değişken , sabit veya aritmetik işleçleri içeren ikisinin bir kombinasyonu olabilir .
Karşılaştırma Türü | Operatör = | Operatörler <,>, <= ,! = ,! <,!>, <> |
---|---|---|
İki boş sütun arasında karşılaştırma | YANLIŞ | YANLIŞ |
NULL değer sütunu ile NULL ifade arasında karşılaştırma | YANLIŞ | YANLIŞ |
NULL ifade ve NULL değer sütunu arasında karşılaştırma | YANLIŞ | YANLIŞ |
İki NULL ifadesi arasında karşılaştırma | DOĞRU | YANLIŞ |
Transact-SQL FROM, işlemlere bir cümle eklemeye DELETEve UPDATEtabloların birleştirilmesine izin verir.
Aşağıdaki örnek utilisateur, " Beklemede " bayrağına sahip olanları tablodan silecektir .
DELETE utilisateur FROM utilisateur as u JOIN drapeau_utilisateur as d ON u.id = d.id WHERE d.nom = 'En attente'