Breaking News
Loading...
10/12/2013

Các trường hợp sử dụng Coalesce và Stuff function trong SQL Server

Hàm Coalesce trong SQL Server chấp nhận nhiều tham số, nó trả về tham số không null đầu tiên trong các tham số đó. Sau đây là các trường hợp sử dụng Coalesce.

Sử dụng Coalesce thay thế Cursor: ví dụ như hình bên dưới, ta muốn nối 5 dòng sau thành một chuỗi cách nhau bởi dấu chấm phẩy

use-coalesce-replace-cursor

Đây là đoạn mã xử lý, ở đây ta sẽ cần database AdventureWorks2008:

DECLARE @DepartmentName VARCHAR(1000) 

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';'  
FROM HumanResources.Department 
WHERE (GroupName = 'Executive General and Administration') 

SELECT @DepartmentName AS DepartmentNames

Để kiểm chứng kỹ thuật trên, tôi tiếp tục tạo ra một kịch bản khác, cũng tương tự như trên:

DECLARE @DepartmentName VARCHAR(1000) = ''
DECLARE @mytable TABLE (NAME VARCHAR(20));

INSERT INTO @mytable
VALUES ('vinh')
 ,(NULL)
 ,('minh')
 ,('linh')

SELECT @DepartmentName = coalesce(@DepartmentName, '') + isnull(NAME+';', '')
FROM @mytable

---SELECT @DepartmentName = @DepartmentName + isnull(NAME+';', '')
--FROM @mytable

SELECT stuff(@DepartmentName, LEN(@DepartmentName), 1, '')



Cách 2: ta dùng function Stuff kết hợp với XML Path

select stuff((select ';'+Name from HumanResources.Department 
WHERE (GroupName = 'Executive General and Administration') for XML Path('')), 1, 1, '') as a

Tham khảo:
http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
Về Stuff function: http://www.sql-server-helper.com/tips/tip-of-the-day.aspx?tkey=3934817c-1a03-4ac9-a0ba-55b2bfbaea0f&tid=72&tkey=uses-of-the-stuff-string-function
http://blog.sqlauthority.com/2013/04/05/sql-server-group-by-rows-and-columns-using-xml-path-efficient-concating-trick/

0 comments:

Post a Comment

 
Toggle Footer