ITPub博客

首页 > Linux操作系统 > Linux操作系统 > COALESCE的妙用

COALESCE的妙用

原创 Linux操作系统 作者:iSQlServer 时间:2009-11-06 10:00:49 0 删除 编辑

今天才发现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的时候就不会出现令人讨厌的“数据库正在被使用中。。。”的警告了!

原文地址:http://www.cnblogs.com/superbullet/archive/2009/11/05/1596830.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-618259/,如需转载,请注明出处,否则将追究法律责任。

上一篇: sql 日期函数
请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2084315