Stored Procedure oluşturulurken nelerin dikkat edilmesi gerektiğini anlatmaya çalışacağım. Script hazırlanırken uzun uzadıya satır yazmamız gerekir. Hangi kod blokları ne işe yaradığına dair işinizde yeniyseniz bilgi birikimize göre zorlaştırabilir veya unutabilirsiniz. Bir sonraki vaka takibi istinaden kolaylık sağlanması amacıyla önerilerim olacak;
- Transaction ve catch yapısını kullanın.
- Kod satır düzenini koruyun.
- Kod blokların ne iş yaptığına dair yorum yazın.
- “Execute” Çalıştırma biçimi-özellik parametre örneği yorumu yazın.
- Tablo ve sütun isimleri ingiliz alfabesine uygun harfler yazın.
- Row-By-Agonizing-Row Yapısını kullanın
- HTML Tağları Kullanılacaksa. VisualCron Entegrasyonu sağlanabilir.
- Bir değişkene fonksiyon uygulanmış ise farklı yerde aynı değişkeni kullanırken aynı fonksiyonu yazmayın.
- Kalabalığı yaratmayalım. Sistemi de yormayalım. Temiz görünsün 🙂
Basit bir örnek yapalım
USE [TempTables]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: BTomer
-- Create date: 24.11.2019
-- Description: Müşteri tablosuna veri ekler.
-- Using : EXEC [CustomerAdd] @Name='Omer' , @LastName='BT'
-- =============================================
CREATE PROCEDURE [dbo].[CustomerAdd]
@Name VARCHAR(50),
@LastName VARCHAR(50)
AS
BEGIN
IF(@Name = '')
RAISERROR('İsim giriniz',16,1)
BEGIN TRANSACTION
BEGIN TRY
BEGIN
INSERT INTO MUSTERI (AD) VALUES (CONCAT(@Name,' ',@LastName))
IF(@@ROWCOUNT > 0)
PRINT 'Veri eklendi.'
END
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END
Bazı sorgu örnekler
Bad: SELECT ... FROM ... WHERE YEAR(myDate) = 2008
Fixed: SELECT ...WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009
Bad: SELECT ... WHERE ISNULL(FullName,'Ed Jones') = 'Ed Jones'
Fixed: SELECT ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))
Bad: SELECT ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: SELECT ... WHERE DealerName Like 'Ford%'
Bad: SELECT ... WHERE DATEDIFF(mm,OrderDate,GetDate()) >= 30
Fixed: SELECT ... WHERE OrderDate < DateAdd(mm,-30,GetDate())
İncelemek isteyebileceğiniz yazılar