Toplu işleri açıklama
T-SQL toplu işlemleri, bir istemci tarafından tek bir birim olarak SQL Server'a gönderilen bir veya daha fazla T-SQL deyimi koleksiyonundan oluşur. SQL Server, bir toplu işlemi ayrıştırırken, optimize ederken ve yürütürken tüm deyimlerde aynı anda çalışır.
SELECT deyimlerini kullanarak sorguları yazan bir rapor yazarıysanız ve genellikle yordamları kullanmıyorsanız, toplu iş sınırlarını anlamak yine de önemlidir. Bu sınırlar, depolanan yordamlardaki ve diğer prosedürlerdeki değişkenler ve parametrelerle çalışmanızı etkiler. Örneğin, bir değişken, referans verildiği aynı kod bloğunda bildirilmelidir. Bu nedenle, bir toplu işte nelerin içerdiğini tanımak önemlidir.
Toplu işlemler istemci uygulaması tarafından sınırlandırılır. Toplu iş sonunu nasıl işaretlediğiniz istemcinizin ayarlarına bağlıdır. SQL Server Management Studio (SSMS), Azure Data Studio ve SQLCMD gibi Microsoft istemcileri için go anahtar sözcüğü kullanılır.
Bu örnekte, her biri GO ile sonlandırılan iki ayrı toplu işlem vardır.
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
Toplu iş sonlandırıcı GO bir T-SQL anahtar sözcüğü değildir, ancak toplu iş sonunu belirtmek için SSMS tarafından tanınan bir anahtar sözcüktür.
T-SQL toplu işlemleriyle çalışırken dikkat edilmesi gereken iki önemli nokta vardır:
- Toplu işlemler, değişken kapsamı için sınırlardır; başka bir deyişle bir toplu işlemde tanımlanan değişkene yalnızca aynı toplu iş içindeki diğer kodlar tarafından başvurulabilir
- Genellikle CREATE VIEW, CREATE FUNCTION ve CREATE PROCEDURE gibi veri tanımı deyimleri olan bazı deyimler aynı toplu işlemde başkalarıyla birleştirilmeyebilir.
Toplu işlemlerle çalışma
Toplu iş, ayrıştırma ve yürütme için SQL Server'a gönderilen T-SQL ifadelerinin bir koleksiyonudur. Toplu işlemlerin nasıl ayrıştırılacağını anlamak, hata iletilerini ve davranışını tanımlamada yararlı olacaktır. SSMS'de Yürüt düğmesine bastığınızda olduğu gibi bir istemci tarafından toplu iş gönderildiğinde, toplu iş SQL Server altyapısı tarafından söz dizimi hataları için ayrıştırılır. Bulunan hatalar toplu işlemin tümünün reddedilmesine neden olur; toplu iş içinde ifadelerin kısmi yürütülmesi olmaz.
Toplu işlem söz dizimi denetimini geçerse, SQL Server nesne adlarını çözümleme, izinleri denetleme ve kodu yürütme için iyileştirme gibi diğer adımları çalıştırır. Bu işlem tamamlanıp yürütme başladıktan sonra ifadeler tek tek ya başarılı olur ya da başarısız olur. Bu, söz dizimi denetiminin önemli bir karşıtlığıdır. Bir satırda çalışma zamanı hatası oluştuğunda, koda hata işleme eklemediğiniz sürece sonraki satır yürütülebilir.
Örneğin, aşağıdaki toplu işlem bir söz dizimi hatası içerir:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Şu hata iletisini verir:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
Hata 1. satırda oluştu, ancak toplu işlemin tamamı reddedildi ve yürütme 2. satırla devam etmiyor. INSERT deyimlerinin her biri ters çevrilmiş olsa ve söz dizimi hatası ikinci satırda oluşsa bile, toplu işlemin tamamı reddedileceğinden ilk satır yürütülmezdi.
Önceki örneği kullanarak bu toplu işlem bir hata içermiyor:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Önceki örneklerde, değişiklik deyimlerinin SELECT deyimlerinden çok toplu olarak gruplanması daha yaygın olduğundan SELECT yerine INSERT deyimlerini kullandık.