婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Sqlserver 自定義函數 Function使用介紹

Sqlserver 自定義函數 Function使用介紹

熱門標簽:400電話辦理泰安 電銷需要外呼系統嗎 我要地圖標注數量有限制嗎 安卡拉地圖標注app 千呼電話機器人可以試用嗎 零成本地圖標注賺錢 互聯網電話外呼系統 家庭農場地圖標注名稱怎樣起名 電話機器人怎么代理商

一.FUNCTION:
在sqlserver2008中有3中自定義函數:標量函數/內聯表值函數/多語句表值函數,首先總結下他們語法的異同點: 

同點:
1.創建定義是一樣的: a, CREATE FUNCTION F_NAME(傳入的參數名稱 傳入參數的類型) b,RETURNS 返回值類型 c,AS 異點:1.標量函數返回的是一個數據類型值,內聯表值函數返回的是一個table,而多語句返回的是一個table的變量(類似前面兩個的結合);
2.語法的結構:標量函數和多語句函數都是要有begin,,,end,內聯表值函數就沒有;
3.調用:標量函數要寫成在dbo,function_name;

標量函數,利用上篇文章寫的數據表,在[T_員工信息]表中查姓名為李異峰員工的工號:

USE SQL_SYSTEM 
GO
CREATE FUNCTION F_GONGHAO(@XINGMING NVARCHAR(5))
RETURNS INT 
AS
BEGIN
DECLARE @GONGHAO INT
SET @GONGHAO =(SELECT Y.工號 FROM[T_員工信息] AS Y WHERE Y.姓名 =@XINGMING )
RETURN @GONGHAO
END
GO
/*上面是標量函數的一個簡單的例舉,下面就開始調用,注意是在dbo.下*/
SELECT [姓名] FROM[T_員工信息] WHERE [姓名]='李異峰' /**對比的查詢*/
/*請注意觀察,和對比*/
SELECT [姓名],DBO.F_GONGHAO ('李異峰')AS 工號 FROM[T_員工信息] WHERE [姓名]='李異峰'
GO

F5下:

內聯表值函數:他返回的可是一個table哦,比如:篩選出2014.2.28號所有員工的打卡記錄:

USE SQL_SYSTEM 
GO
CREATE FUNCTION F_DAKAJILU(@RIQI DATE)
RETURNS TABLE
AS
RETURN(
SELECT* FROM[T_考勤]AS K WHERE K.日期 =@RIQI 
)
GO
/*需要注意的就是他的寫法上沒有begin+end*/
/*下面就是將date帶入函數中*/
SELECT*
FROM [F_DAKAJILU]('2014/02/28')
GO

F5:

多語句表值函數就是,表值函數+內聯表值函數綜合版:就寫個返回當天打卡記錄和涉及員工的個人信息:

USE SQL_SYSTEM 
GO
CREATE FUNCTION F_D_DAKAJILU(@RIQI DATE)
RETURNS @TEMP_TABLE TABLE( /*這里要注意的就是既然是多語句的話,那你就要告訴計算機你要查詢的列是哪些*/
[姓名]NVARCHAR(5) NOT NULL,
[工號]INT NOT NULL,
[職位]NVARCHAR(10) NOT NULL,
[部門]NVARCHAR(5) NOT NULL,
[是否夜班]NCHAR(1) NOT NULL,
[日期]DATE NOT NULL,
[當天上班時間]FLOAT(1)NOT NULL
) 
/*以上就是要告訴計算機你要的一個基本信息列*/
AS
BEGIN
INSERT INTO @TEMP_TABLE /*這句的意思是將下面的查詢結果插入到@TEMP_TABLE變量中去*/
SELECT Y.姓名 ,Y.工號 ,Y.職位 ,Y.部門 ,K.夜班 ,K.日期 ,K.當天上班時間 
FROM[T_員工信息] AS Y CROSS JOIN [T_考勤] AS K  /*這里我用的是交叉連接*/
WHERE Y.工號 =K.工號 AND K.日期=@RIQI 
RETURN 
END
GO
SELECT*
FROM[F_D_DAKAJILU]('2014/02/28')
GO

F5:

二:CURSOR,當要檢索復雜的數據的每條數據的時候就可以用到它,類似于c語言的指針一樣,他可以在你的數據表中閱歷每條數據和更新。 1.新寫個cursor閱歷數據表(T_員工信息)的數據過程: 1.1.聲明一個只讀cursor:

USE SQL_SYSTEM 
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION CURSOR_READ_T_員工信息
DECLARE CUR_T_員工信息 SCROLL CURSOR FOR
SELECT Y.姓名 ,Y.工號 ,Y.職位 ,Y.部門 FROM[T_員工信息]AS Y ORDER BY Y.工號 ASC 
COMMIT TRANSACTION CURSOR_READ_T_員工信息
GO

1.2.打開:

OPEN GLOBAL CUR_T_員工信息
GO

1.3.閱歷每條數據:

/*聲明4個變量用來接收暫存游標中的數據*/
DECLARE @XINGMING NVARCHAR(3),@GONGHAO INT,@ZHIWEI NVARCHAR(10),@BUMEN NVARCHAR(8)
/*利用全局變量求取當前數據表中的數據行數和*/
PRINT'當前數據表中有'+CAST(@@CURSOR_ROWS AS NVARCHAR(6))+'行數據。'
/*讀取第一條數據并存入暫存變量中*/
FETCH FIRST FROM[CUR_T_員工信息]INTO @XINGMING,@GONGHAO,@ZHIWEI,@BUMEN
/*利用@@FETCH_STATUS返回的數值來確定cursor在數據表中讀取的情況=0為fetch執行成功*/
WHILE(@@FETCH_STATUS =0)
BEGIN
PRINT'姓名:'+@XINGMING+' 工號:'+CONVERT(VARCHAR(3),@GONGHAO)+' 職位:'+@ZHIWEI+' 部門:'+@BUMEN
FETCH NEXT FROM[CUR_T_員工信息] INTO @XINGMING,@GONGHAO,@ZHIWEI,@BUMEN
END
GO

F5:

1.4.用完后就關閉和釋放:

/*關閉*/
CLOSE GLOBAL CUR_T_員工信息
/*釋放內存*/
DEALLOCATE GLOBAL CUR_T_員工信息
GO

這樣的話就實現了讀取每條記錄的功能,然后就可以用它來更新相關的數據條(所有的工號值+100):

USE SQL_SYSTEM 
/*下面聲明和打開update——cursor*/
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION TR_UPDATE_YG 
DECLARE CUR_T_YG CURSOR FOR
SELECT YG.姓名 ,YG.工號 ,YG.職位 ,YG.部門 FROM[T_yuangongxinxi]AS YG FOR 
UPDATE 
OPEN GLOBAL CUR_T_YG
COMMIT TRANSACTION TR_UPDATE_YG

UPDATE:

PRINT'當前有'+CONVERT(VARCHAR(3),@@CURSOR_ROWS)+'條數據行。'
FETCH NEXT FROM[CUR_T_YG]
WHILE(@@FETCH_STATUS=0)
BEGIN
UPDATE[T_yuangongxinxi] 
SET[工號] =[工號]+100
WHERE CURRENT OF CUR_T_YG
FETCH NEXT FROM[CUR_T_YG] 
END

SELECT:

關閉釋放:

CLOSE GLOBAL CUR_T_YG
DEALLOCATE GLOBAL CUR_T_YG

三:PROCEDURE,存儲過程是利用SQL Server所提供的Transact-SQL語言所編寫的程序,同時也能在高級語言上調用其存儲過程。 3.1.無參數:說一個調用查詢數據表的pro:

USE SQL_SYSTEM 
GO
CREATE PROCEDURE PRO_SELECT_T
WITH RECOMPILE 
AS
SELECT* FROM[T_yuangongxinxi] 
GO
EXECUTE:
EXECUTE PRO_SELECT_T

F5:

3.1.2.EXECUTE PRO_SELECT_T在這里其實就是一個view,還可以把execute調用結果插入到新表:

USE SQL_SYSTEM 
SELECT*
INTO AA 
FROM[T_yuangongxinxi] 
GO
TRUNCATE TABLE AA --TRUNCATE與DELETE的區別就是TR效率高于DE,而且DE清空時會在日志里面留下恢復記錄
GO
INSERT INTO AA
EXECUTE PRO_SELECT_T
GO

結果就不截圖了, 3.2.帶參pro,寫個修改后輸出修改的信息: 例如公司的員工經常有職位變動的情況,就寫個這方面的,給出變動員工的工號就可以修改該員工的職位,然后將修改的操作反饋出來:

USE SQL_SYSTEM 
GO
CREATE PROCEDURE PRO_DAUP_ZHIWEI
@GONGHAO INT,@ZHIWEI NVARCHAR(10),@RETURNS NVARCHAR(50) OUTPUT
AS
BEGIN
/*獲取更新前的職位信息*/
DECLARE @QIAN_RETURN_ZHIWEI NVARCHAR(10),@XINGMING NVARCHAR(3)
SELECT @QIAN_RETURN_ZHIWEI =AA.職位 ,@XINGMING =AA.姓名 
FROM[AA]
WHERE AA.工號 =@GONGHAO 
/*更新*/
UPDATE[AA] 
SET[職位] =@ZHIWEI WHERE AA.工號 =@GONGHAO 
SET @RETURNS = '已經成功將工號為:【'+CONVERT(VARCHAR(3),@GONGHAO)+'】,姓名為:【'+@XINGMING+'】,職位【'+
@QIAN_RETURN_ZHIWEI+'】更新為:【'+@ZHIWEI
END

EXECUTE:

DECLARE @PRINTF NVARCHAR(50);
EXECUTE PRO_DAUP_ZHIWEI 101,'SQL工程師',@PRINTF OUTPUT 
SELECT @PRINTF AS '更新消息'
GO

F5:

PRO就說到這里了;
四:TRIGGER,觸發器,類似于一個地雷一樣,只要你觸犯了他的要求的話,他就開始工作了,也可以利用這個功能去維持或阻擋某些不想發生的錯誤操作, DDL:如:不許刪除某個【AA】表:

USE SQL_SYSTEM 
GO
CREATE TRIGGER DROP_T
ON DATABASE FOR DROP_TABLE 
AS
BEGIN
ROLLBACK TRANSACTION 
PRINT'不能刪除的,因為我已經添加了觸發保護!'
END

drop:

DROP TABLE AA 

F5:

DML,是解決對最低層數據的問題: 在這里就存在臨時的2個表:deleted 和 inserted 邏輯(概念)表,要搞明白就要知道trigger的工作原理: insert 操作時:

delete 操作時:

update 操作時:

簡單舉個例子來說下update的操作:也就是重點看inserted和deleted表上:

USE [SQL_SYSTEM]
GO
/****** Object: Trigger [dbo].[UPDATE_T] Script Date: 03/04/2014 16:04:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[UPDATE_T]
ON [dbo].[AA] INSTEAD OF UPDATE
AS
BEGIN
INSERT INTO T_UPDATE_HOU
SELECT* 
FROM[inserted] 
/*將更新成的數據插入到【T_UPDATE_HOU】中*/
INSERT INTO T_UPDATE_QIAN
SELECT*
FROM[deleted] 
/*將更新前的數據插入到【T_UPDATE_QIAN】中*/
PRINT'更新完畢,更新前的數據已經寫入到【T_UPDATE_QIAN】,更新后的數據插入到【T_UPDATE_HOU】。'
END

update:

USE SQL_SYSTEM 
GO
UPDATE[AA] 
SET AA.職位 ='SQL高級工程師'
WHERE AA.工號=101
/*以上是個簡單的更新操作,用于update觸發*/
SELECT* FROM[T_UPDATE_HOU] --修改成的數據
SELECT* FROM[T_UPDATE_QIAN] --待修改的數據
GO

F5:

在去年的的時候我寫了一個利用trigger對多表連接的view進行更新的操作:

https://www.jb51.net/article/95473.htm

您可能感興趣的文章:
  • SqlServer2000+ 身份證合法校驗函數的示例代碼
  • SQLServer行列互轉實現思路(聚合函數)
  • SQLSERVER分頁查詢關于使用Top方式和row_number()解析函數的不同
  • SQLServer中Partition By及row_number 函數使用詳解
  • SQLServer中merge函數用法詳解
  • sqlserver四舍五入使用round函數及cast和convert函數
  • 談談sqlserver自定義函數與存儲過程的區別
  • SQLServer之常用函數總結詳解

標簽:濱州 東營 文山 池州 來賓 大同 黃山 新鄉

巨人網絡通訊聲明:本文標題《Sqlserver 自定義函數 Function使用介紹》,本文關鍵詞  Sqlserver,自定義,函數,Function,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Sqlserver 自定義函數 Function使用介紹》相關的同類信息!
  • 本頁收集關于Sqlserver 自定義函數 Function使用介紹的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    午夜av一区二区三区| 天堂在线一区二区| 国产精品久线在线观看| 精品一区二区三区av| 欧美性大战久久| 久久久久久毛片| 国产麻豆成人传媒免费观看| 欧美日韩国产综合一区二区| 国产精品三级久久久久三级| 成人成人成人在线视频| 精品日韩99亚洲| 亚洲成a人片综合在线| 97精品久久久午夜一区二区三区 | www.综合网.com| 中文字幕乱码亚洲精品一区| 久久99热狠狠色一区二区| 久久午夜免费电影| 国产一区二区三区四区在线观看| 7777精品伊人久久久大香线蕉完整版 | 99视频超级精品| 久久久久亚洲蜜桃| 久久成人av少妇免费| 99re这里都是精品| 国产精品久99| 日本黄色一区二区| 一区二区三区视频在线观看| 欧美区一区二区三区| 天堂资源在线中文精品| 国产成+人+日韩+欧美+亚洲| 国产精品久久久久影院亚瑟| 欧美三级蜜桃2在线观看| 黄页网站大全一区二区| 日韩电影在线免费| 欧美精品一区在线观看| 国产成人免费av在线| 亚洲中国最大av网站| 欧美日韩免费视频| 视频一区欧美日韩| 国产精品久久三区| 懂色av一区二区三区蜜臀| 国产精品国产三级国产普通话99 | 国产风韵犹存在线视精品| 欧美本精品男人aⅴ天堂| 国产精品一品二品| 五月婷婷久久丁香| 精品国产91乱码一区二区三区| 亚洲综合色网站| 久久亚洲一区二区三区明星换脸 | 99精品国产91久久久久久 | 成人国产精品免费观看动漫| 亚洲精品乱码久久久久久| 欧美日韩电影在线| 亚洲免费观看高清完整版在线 | 欧美精品vⅰdeose4hd| 激情小说欧美图片| 日韩美女精品在线| 久久女同精品一区二区| 色哟哟在线观看一区二区三区| 国产91高潮流白浆在线麻豆| 亚洲一区二区视频在线| 久久午夜老司机| 精品国免费一区二区三区| 色域天天综合网| 国产一区二区三区四| 麻豆中文一区二区| 亚洲一线二线三线视频| 91精品国产欧美一区二区18| 奇米色一区二区三区四区| 国产精品女主播av| 日韩欧美国产综合一区| 色婷婷av一区二区三区软件 | 92精品国产成人观看免费| 麻豆国产欧美一区二区三区| 欧美一区二区性放荡片| 欧美性大战久久| www.66久久| 亚洲成年人影院| 亚洲特黄一级片| 7777精品伊人久久久大香线蕉完整版 | 日韩三级精品电影久久久| av动漫一区二区| 在线观看区一区二| 国产成a人无v码亚洲福利| 蓝色福利精品导航| 肉色丝袜一区二区| 91精品国产综合久久久蜜臀粉嫩| 日本韩国欧美三级| 99re视频精品| 91丝袜美腿高跟国产极品老师| 久色婷婷小香蕉久久| 亚洲成av人片| 日韩成人免费在线| 国产一区二区三区在线观看精品| 国内成+人亚洲+欧美+综合在线 | 粉嫩aⅴ一区二区三区四区| av爱爱亚洲一区| 91亚洲精品乱码久久久久久蜜桃| 欧美日韩一二区| 欧美va在线播放| 欧美精品一区二区三区蜜臀| 亚洲视频狠狠干| 26uuu另类欧美| 欧美日本国产一区| 国产精品日日摸夜夜摸av| 亚洲欧美一区二区视频| 高潮精品一区videoshd| 国内精品国产成人国产三级粉色| 国产乱码精品一区二区三| 色综合久久久久综合体桃花网| 色综合久久久久久久久| 国产校园另类小说区| 亚洲影院在线观看| 免费亚洲电影在线| 91黄色激情网站| 欧美一区二区三区视频在线观看| 精品国产网站在线观看| 一区二区三国产精华液| 美国毛片一区二区| 欧美亚洲自拍偷拍| 欧美一级高清大全免费观看| 国产精品视频一区二区三区不卡| 免费在线视频一区| 成人伦理片在线| 色婷婷亚洲综合| 国产精品网站在线观看| 亚洲成人免费看| 91丨porny丨中文| 中文字幕不卡在线| 亚洲超碰精品一区二区| 日韩黄色小视频| 欧美精品少妇一区二区三区| 国产日产亚洲精品系列| 激情综合色丁香一区二区| 色婷婷综合中文久久一本| 欧美精品一区二区三区很污很色的| 亚洲最大成人网4388xx| 粉嫩久久99精品久久久久久夜| 欧美xxxxx牲另类人与| 亚洲欧美激情在线| 国产suv一区二区三区88区| 久久理论电影网| 日韩av电影免费观看高清完整版在线观看 | 欧美一级黄色大片| 中文字幕一区在线观看| 亚洲国产日韩综合久久精品| 精品亚洲成av人在线观看| 欧洲人成人精品| 亚洲国产另类精品专区| 99精品久久99久久久久| 欧美日韩视频在线观看一区二区三区| 亚洲欧美国产高清| 99精品黄色片免费大全| 亚洲色大成网站www久久九九| 国产成人亚洲综合a∨婷婷图片| 欧美一区二区三区视频| 美女性感视频久久| 欧美日韩精品一区二区天天拍小说 | 欧美亚洲自拍偷拍| 欧美精品欧美精品系列| 亚洲激情图片qvod| 91视频.com| 亚洲视频一区在线| 成人免费观看男女羞羞视频| 亚洲女人的天堂| 色欧美片视频在线观看在线视频| 一色屋精品亚洲香蕉网站| 在线观看成人免费视频| 亚洲狠狠爱一区二区三区| 日韩精品中文字幕一区| 国产在线观看一区二区| 国产日韩在线不卡| 色婷婷亚洲综合| 五月天激情综合| 欧美国产禁国产网站cc| 91女神在线视频| 久久九九久久九九| 日本乱人伦aⅴ精品| 亚洲第一会所有码转帖| 国产农村妇女精品| 成人sese在线| 日韩激情视频在线观看| 中文成人av在线| 91香蕉视频在线| 久久国产福利国产秒拍| 欧美国产在线观看| 成人综合在线视频| 秋霞午夜av一区二区三区| 中文字幕不卡的av| 日韩精品中文字幕在线一区| 色综合天天综合在线视频| 亚洲成人免费看| 中文字幕佐山爱一区二区免费| 精品1区2区3区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲一区二区高清| 欧美日韩高清在线| 色综合久久六月婷婷中文字幕| 蜜臀av一区二区在线免费观看| 亚洲欧美日韩久久| 欧美va天堂va视频va在线|