Program akışını denetlemek için EĞER ve WHILE bloklarını kullanma
Tüm programlama dilleri, programın akışını veya deyimlerin yürütüleceği sırayı belirlemenize yardımcı olan öğeler içerir. C# gibi tam özellikli olmayan T-SQL, mantıksal testler gerçekleştirmek ve T-SQL veri işleme deyimlerinizi içeren döngüler oluşturmak için kullanabileceğiniz bir dizi akış denetimi anahtar sözcüğü sağlar. Bu derste T-SQL IF ve WHILE anahtar sözcükleri kullanmayı öğreneceksiniz.
Akış dilinin T-SQL denetimini anlama
SQL Server, T-SQL toplu işlemleri, saklı yordamlar ve çok durumlu kullanıcı tanımlı işlevler içinde program yürütme akışını denetleyebilen dil öğeleri sağlar. Bu akış denetimi öğeleri, deyimlerin yürütülip yürütülmeyeceğini program aracılığıyla belirleyebileceğiniz ve yürütülmesi gereken bu deyimlerin sırasını program aracılığıyla belirleyebileceğiniz anlamına gelir.
Bu öğeler şunlardır ancak bunlarla sınırlı değildir:
-
IFBoole ifadesini temel alan kodu yürüten ...ELSE. -
WHILE, bir koşulun true olması koşuluyla yürütülen bir döngü oluşturur. -
BEGIN...END, birlikte yürütülmesi gereken bir dizi T-SQL deyimini tanımlar. - T-SQL akış denetimi işlemlerini desteklemek için kullanılan , , WAITFOR ve
RETURNgibiBREAKCONTINUEdiğer anahtar sözcükler.
Deyiminin bir örneği aşağıda verilmiştir IF :
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Programlarınızda koşullu mantık kullanmak için EĞER...BAŞKA deyimlerini kullanın.
IF...ELSE yapısı T-SQL'de koşula göre bir kod bloğunu koşullu olarak yürütmek için kullanılır. deyimi, IF aşağıdaki deyimin veya bloğun (...END kullanılıyorsaBEGIN) yürütülip yürütülmeyeceğini belirler. Koşul TRUE olarak değerlendirilirse, bloktaki kod yürütülür. Koşul FALSE veya UNKNOWN olarak değerlendirildiğinde, isteğe bağlı ELSE anahtar sözcük başka bir kod bloğunu tanımlamak için kullanılmadığı sürece blok yürütülmez.
Aşağıdaki IF deyimde, veritabanına OBJECT_ID IS NULLolup olmadığını soruyoruz ve öyleyse deyimini döndüreceğiz PRINT . Bu örnekte nesne NULL DEĞİl ve bu nedenle YANLIŞ değeridir ve bu da kodun BEGIN/END yürütülmeyeceği anlamına gelir. deyimi PRINT yalnızca nesne veritabanında mevcut değilse yürütülür.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Yukarıdaki kodda yalnızca bir IF deyimi olan sınırlamalar nedeniyle bu kafa karıştırıcı olabilir. ve ELSE birleştirerek IF kodunuzdaki mantıkla daha fazla esneklik sağlar ve birden çok ELSE deyim kullanabilirsiniz. kullanımıyla ELSE, koşul aşağıdaki örnekte olduğu gibi YANLIŞ veya BİlİNMEYEN olarak değerlendirildiğinde IF başka bir yürütme seçeneğiniz vardır:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
Veri işleme işlemleri içinde EXISTS anahtar sözcüğüyle kullanmak IF , aşağıdaki örnekte olduğu gibi verimli varlık denetimleri için yararlı bir araç olabilir:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
WHILE deyimlerini kullanarak döngüleri anlama
deyimi WHILE , bir koşula dayalı bir döngüde kod yürütmek için kullanılır.
IF deyimi gibi deyimi de WHILE aşağıdaki deyimin veya bloğun (...END kullanılıyorsaBEGIN) yürütüleceğini belirler. Koşul TRUE olarak değerlendirdiği sürece döngü yürütülmeye devam eder. Genellikle, koşul tarafından test edilen ve döngünün gövdesinde manipüle edilen bir değişkenle döngünün denetiminde olursunuz.
Aşağıdaki örnek koşuldaki değişkenini @empid kullanır ve bloktaki BEGIN...END değerini değiştirir.
SELECT burada (yerine SET) bir sorgu sonucundan bir değişkene sütun değeri okumayı göstermek için kullanılır:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Döngü WHILE içindeki ek seçenekler için ve BREAK anahtar sözcüklerini kullanarak CONTINUE akışı denetleyebilirsiniz.