SQL2005学习笔记 APPLY 运算符
前端之家收集整理的这篇文章主要介绍了
SQL2005学习笔记 APPLY 运算符,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用APPLY运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。
表值函数作为右输入,外部表表达式作为左输入。
通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。
APPLY运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。
APPLY 运算符的左操作数和右操作数都是表表达式。
这些操作数之间的主要区别是:右操作数可以使用表值函数,从左操作数获取一个列作为函数的参数之一。左操作数可以包括表值函数,但不能以来自右操作数的列作为参数。
演示一下APPLY 运算符的用法:
<div class="codetitle"><a style="CURSOR: pointer" data="57406" class="copybut" id="copybut57406" onclick="doCopy('code57406')"> 代码如下:
<div class="codebody" id="code57406">
--建一个表
CREATE TABLE MyData
(
ids INT IDENTITY PRIMARY KEY,
Data NVARCHAR(1000)
)
go
--插入测试数据
INSERT INTO MyData VALUES('')
INSERT INTO MyData VALUES('a,b,c')
INSERT INTO MyData VALUES('q')
INSERT INTO MyData VALUES('i,p')
GO
select
from MyData
go
--查询结果
ids Data
1
2 a,c
3 q
4 i,p
建立一个表,作用是:按逗号分解字符,分解出的每一个字符做一行数据返回
<div class="codetitle">
<a style="CURSOR: pointer" data="49120" class="copybut" id="copybut49120" onclick="doCopy('code49120')"> 代码如下:
<div class="codebody" id="code49120">
create FUNCTION fun_MyData(
@data AS NVARCHAR(1000)
)
RETURNS @tem TABLE( id INT,value nvarchar(100) )
AS
BEGIN
select @data=isnull(@data,'')
if len(@data)=0
return --字符长度为0 ,
退出 declare @id AS INT
select @id=1
declare @end AS INT
select @end = CHARINDEX(',',@data)
while(@end>0)
begin
insert into @tem(id,value)
select @id,left(@data,@end-1)
select @id=@id+1
select @data=right(@data,len(@data)-@end)
select @end = CHARINDEX(',@data)
end
if len(@data)>0
begin
insert into @tem(id,@data
end
RETURN
END