COALESCE的妙用

今天才发现SQL Server里面的COALESCE功能的强大性, 用MSND上面的定义"Returns the first nonnull expression among its arguments.”  并不能了解到太多使用的好处,仅仅知道可以返回第一个非空的表达式。它这一点跟ISNULL很类似, 比如COALESCE(@test, '') 跟 ISNULL(@test, '')是等价的。但是它可以传入N个参数, ISNULL只能有两个参数。

其实COALESCE最大的妙处是可以避免使用cursor,于是可以达到减少一些代码的功效。

比如,假如你想把表格里面的某列的数据显示在一个列里面,怎么做?用cursor循环把一行一行的数据拿出去赋值到一个变量里面?使用COALESCE就可以避免使用loop的情况。

--1. 创建表格 

CREATE TABLE Test

(

id INT,

value NVARCHAR(1000)

)

 --插入五行数据 

INSERT INTO Test

SELECT 1, 'a'

UNION

SELECT 2, 'b'

UNION

SELECT 3, 'c'

UNION

SELECT 4, 'd'

UNION

SELECT 5, 'e'

--SELECT * FROM Test

 

-- 3. 定义一个变量以保存value列的数据 

DECLARE @result NVARCHAR(MAX)

SELECT @result = COALESCE(@result, '') + value + ' > '   --重点在此!

FROM Test

SELECT @result 

猜想一下结果会是什么? 

a > b > c > d > e > 

 哈哈,妙吧? 使用这个功能便可以动态地执行多个sql语句了。以下这个例子很实用,直接拷贝自

http://www.mssqltips.com/tip.asp?tip=1521】 

DECLARE @SQL VARCHAR(8000

SELECT @SQL=COALESCE(@SQL,'')+'Kill '+CAST(spid AS VARCHAR(10))+ '; '  
FROM sys.sysprocesses  
WHERE DBID=DB_ID('AdventureWorks'

PRINT @SQL --EXEC(@SQL) Replace the print statement with exec to execute 

这个语句很实用吧,可以用来关闭所有占用这个AdventureWorks数据库的事务,这样你在还原数据库AdventureWorks的时候就不会出现令人讨厌的“数据库正在被使用中。。。”的警告了!

 

 

 

 

转载于:https://www.cnblogs.com/superbullet/archive/2009/11/05/1596830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值