搜尋本站文章

2012-06-14

SQL Server:認識 COALESCE() 函數,補充範例


請先參考前一篇文章:
T-SQL:認識 COALESCE() 函數
http://sharedderrick.blogspot.tw/2012/06/t-sql-coalesce.html



請參考以下的範例:

EX1. 刪除 SQL Server 上全部的連線,但保留本身這條連線不會刪除


-- 檢視 SQL Server 目前所有的連線 session ;所有目前的處理序
USE master
GO
SELECT * FROM sys.dm_exec_connections
GO

-- 01_查詢目前所有的連線



-- 使用 ISNULL() 函數:刪除 SQL Server 上全部的連線,但保留本身這條連線不會刪除
DECLARE @str1 nvarchar(MAX)

SELECT @str1 = ISNULL(@str1, '') + 'KILL ' + CAST(session_id AS nvarchar(10)) + ';'
FROM sys.dm_exec_connections
WHERE session_id<>@@SPID

-- PRINT @str1
EXEC sp_executesql @str1
GO

/*
PRINT 陳述式所回傳的結果:
KILL 52;KILL 51;KILL 53;KILL 54;KILL 56;KILL 57;KILL 58;KILL 59;KILL 60;KILL 61;KILL 62;KILL 63;KILL 64;KILL 65;
*/


-- 02_PRINT 陳述式所回傳的結果



-- 使用 COALESCE() 函數:刪除 SQL Server 上全部的連線,但保留本身這條連線不會刪除
DECLARE @str1 nvarchar(MAX)

SELECT @str1 = COALESCE(@str1, '') + 'KILL ' + CAST(session_id AS nvarchar(10)) + ';'
FROM sys.dm_exec_connections
WHERE session_id<>@@SPID

-- PRINT @str1
EXEC sp_executesql @str1
GO


-- 03_只剩下自身此條連線




EX2. 使用逗號分隔回傳的資料

-- 使用 ISNULL() 函數:使用逗號分隔回傳的資料
USE Northwind
GO
DECLARE @titlelist varchar(MAX)
SELECT @titlelist = ISNULL(@titlelist + ',' , '') + Title
FROM dbo.Employees

SELECT @titlelist N'職稱列表'
GO


-- 使用 COALESCE() 函數:使用逗號分隔
USE Northwind
GO
DECLARE @titlelist varchar(MAX)
SELECT @titlelist = COALESCE(@titlelist + ',' , '') + Title
FROM dbo.Employees

SELECT @titlelist N'職稱列表'
GO

-- 04_使用逗號分隔回傳的資料



參考資料

T-SQL:認識 COALESCE() 函數
http://sharedderrick.blogspot.tw/2012/06/t-sql-coalesce.html

How to use COALESCE and ISNULL?
http://www.sqlusa.com/bestpractices/coalesce/

Performance of COALESCE vs. IS NULL
http://sqlserverperformance.idera.com/tsql-optimization/performance-coalesce-null/