SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software Kodyaz Development Resources
Development resources, articles, tutorials, code samples and tools and downloads for ASP.Net, SQL Server, R Script, Windows, Windows Phone, AWS, SAP HANA and ABAP, like SAP UI5, Screen Personas, etc.




Install SQL Server 2019
download SQL Server 2019
download SQL Server 2017
download SQL Server 2016
download SQL Server 2014



COALESCE Kullanılarak UserDefinedFunction Yardımı ile Bir Kitabın Yazarlarının Okunması


Kitaplar hakkında bilgi veren bir uygulamanız var ve bir kitabın yazarlarını da bu uygulamada görüntülemek istiyorsunuz.
Bir kitabın birden fazla yazarının olması durumunda bu bilgiyi kitap ile ilgili tabloda bir kolon içinde tutmanız olanaksız hale gelecektir.
Bunun için yapılacak çözümlerden birisi cross tablolar kullanarak yazar id bilgisini ile kitap id bilgisini bu tabloda birleştirmektir. Böylece bu tabloda birden fazla yazar id bilgisini bir kitap için farklı kayıtlar olarak girebilirsiniz.

Bu durumda kitap tablosundan bilgileri SELECT ederken yazarların listesini almak problem olabilir.

Bu sorunu da COALESCE fonksiyonunu kullanarak çözebiliriz.
İlk adım olarak COALESCE kullanarak AuthorsListOfBook adında bir UserDefinedFunction oluşturabiliriz.

CREATE FUNCTION AuthorsListOfBook (
  @BookId int
)
RETURNS nvarchar(255)
AS
BEGIN

DECLARE @str AS nvarchar(255)

SELECT
  @str = COALESCE(@str + ', ', '') + FirstName + SPACE(1) + LastName
FROM BookAuthor (NoLock)
INNER JOIN BookAuthorCrossTable (NoLock)
  ON BookAuthorCrossTable.AuthorId = BookAuthor.AuthorId
WHERE BookAuthorCrossTable.BookId = @BookId

RETURN @str
END




Bu AuthorsListOfBook adındaki UserDefinedFunction bize kitap kaydı için birden fazla kayıtta bulunan yazar id'lerini kullanarak yazar isimlerini "," karakteri ile birleştirerek nvarchar(255) tipinde bir string değişkeni içinde geriye döndürür.

Bu fonksiyon kitap ile ilgili genel bilgiyi çektiğimiz query (sorgu) içinde aşağıdaki şekilde kullanılabilir.

SELECT
  Site_Books.*,
  dbo.AuthorsListOfBook(Site_Books.BookId) as Authors
FROM Site_Books (NoLock)
WHERE Site_Books.BookId = @BookId

COALESCE kullanımı ile ilgili daha detaylı bilgiyi aşağıdaki konuda bulabilirsiniz :
"COALESCE fonksiyonu ile bir tablonun bir kolonundaki değerleri bir string haline getirmek" başlıklı forumda bulabilirsiniz.






Related SQL Resources

SQL Server Articles

SQL Server 2012

SQL Server Tools

SQL Blog

MS SQL Server Forums









Copyright © 2004 - 2019 Eralper YILMAZ. All rights reserved.
Community Server by Telligent Systems