好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > SQL2005學習筆記 APPLY 運算符

SQL2005學習筆記 APPLY 運算符

熱門標簽:奧維地圖標注字體大小修改 江西穩定外呼系統供應商 中國地圖標注省份用什么符號 北京智能外呼系統供應商家 智能電銷機器人教育 高德地圖標注電話怎么沒了 電話機器人錄音師薪資 無錫梁溪公司怎樣申請400電話 孝感銷售電銷機器人廠家
使用APPLY運算符可以為實現查詢操作的外部表表達式返回的每個行調用表值函數。
表值函數作為右輸入,外部表表達式作為左輸入。
通過對右輸入求值來獲得左輸入每一行的計算結果,生成的行被組合起來作為最終輸出。
APPLY運算符生成的列的列表是左輸入中的列集,后跟右輸入返回的列的列表。
APPLY 運算符的左操作數和右操作數都是表表達式。
這些操作數之間的主要區別是:右操作數可以使用表值函數,從左操作數獲取一個列作為函數的參數之一。左操作數可以包括表值函數,但不能以來自右操作數的列作為參數。
演示一下APPLY 運算符的用法:
復制代碼 代碼如下:

--建一個表
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,b,c
3 q
4 i,p

建立一個表,作用是:按逗號分解字符,分解出的每一個字符做一行數據返回
復制代碼 代碼如下:

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,value)
select @id,@data
end
RETURN
END

開始使用APPLY 運算符:
復制代碼 代碼如下:

SELECT m.ids, f.*
FROM MyData m CROSS APPLY fun_MyData(data) f
go
--結果
ids id value
2 1 a
2 2 b
2 3 c
3 1 q
4 1 i
4 2 p
SELECT m.ids, f.*
FROM MyData m OUTER APPLY fun_MyData(data) f
go
--結果
ids id value
1 NULL NULL
2 1 a
2 2 b
2 3 c
3 1 q
4 1 i
4 2 p

我們看到OUTER APPLY返回的結果行比CROSS APPLY多。
這一點有點象inner join(內部聯接)和Left Outer Join(左外部聯接)之間的關系.
其實APPLY有兩種形式:CROSS APPLY 和 OUTER APPLY。
CROSS APPLY僅返回外部表中通過表值函數生成結果集的行。
OUTER APPLY既返回生成結果集的行,也返回不生成結果集的行,其中表值函數生成的列中的值為 NULL。
以上是sql2005的解決方案,下面我演示一下sql2000怎么解決這樣的查詢:
思路是:做個循環來逐個鏈接查詢。
復制代碼 代碼如下:

--sql2000版本
declare @ids int
select @ids =0
declare @data nvarchar(200)
select @data=''
--定義表變量臨時存放數據
declare @tem table(
ids int,
id int,
value nvarchar(100)
)
DECLARE test_cursor CURSOR FOR
SELECT ids, Data FROM MyData
OPEN test_cursor
FETCH NEXT FROM test_cursor
INTO @ids,@data
WHILE @@FETCH_STATUS = 0
begin
insert into @tem
select @ids,id,value
from dbo.fun_MyData(@data)
FETCH NEXT FROM test_cursor
INTO @ids,@data
end
CLOSE test_cursor
DEALLOCATE test_cursor
select * from @tem

同樣得到了結果,但是sql2000要利用循環,這樣代碼復雜,計算耗時。
讓我們充分利用Sql Server2005新兵器:APPLY運算符給我們帶來的簡便快捷的運算方式吧.

標簽:荊州 通化 臨滄 齊齊哈爾 阜陽 海北 泰州 那曲

巨人網絡通訊聲明:本文標題《SQL2005學習筆記 APPLY 運算符》,本文關鍵詞  SQL2005,學習,筆記,APPLY,運算符,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL2005學習筆記 APPLY 運算符》相關的同類信息!
  • 本頁收集關于SQL2005學習筆記 APPLY 運算符的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 色射视频| 国产亚洲玖玖玖在线观看| Free HD XXXX video 69| 爱爱精品视频| 欧美成人中文字幕在线视频| 久久亚洲精品无码Va白人极品| 欧美一级特黄A片免费观看密森| 国语对白自拍| 亚洲色网址| 日韩欧美在线不卡| 欧美一级a视频免费放| 欧美AV无码区二三区A片噜大师| 深夜他撕开我的奶罩| TS人妖女王调教VK| 成色18k1.220.38官网| 女人全身裸无遮挡图片| 中国男gary帅西北君君| 最新国语露脸精品国产| 亚洲精品无码亚洲字幕资2022| 国产大片黄在线看免费| 野花免费观看日本电影1| 亚洲女人下面毛茸茸| 扒开腿挺进嫩苞处破苞疼| 国产白嫩漂亮的美女kTV| 日韩视频91| 男人扎女下面很爽网站| 肉体服务bd| 精品人妻视频在线| でも私はあなたより賢いです意思 | 国产精品亚洲日日摸夜夜添| 老师裸露胸免费视频网站| 欧美人与禽猛交狂配免费| 色情乱婬老太婆A片视频下载| 搞基动图| 男同gay玩奴男同玩奴| 免费观看黄网站| 嫩草影院亚洲入ncyyxy口| 奇米777狠狠888俺也去| 女人裸身视频| 国产精品视频分类一区| 国产黄频在线观看|