Stored procedure oluşturulurken Dikkat edilmesi gereken kurallar

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

Leave a Reply