最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

談?wù)剆qlserver自定義函數(shù)與存儲(chǔ)過程的區(qū)別

 更新時(shí)間:2014年09月03日 17:26:52   投稿:mdxy-dxy  
這篇文章主要介紹了談?wù)剆qlserver自定義函數(shù)與存儲(chǔ)過程的區(qū)別,需要的朋友可以參考下

一、自定義函數(shù):

  1. 可以返回表變量
  2. 限制頗多,包括
    不能使用output參數(shù);
    不能用臨時(shí)表;
    函數(shù)內(nèi)部的操作不能影響到外部環(huán)境;
    不能通過select返回結(jié)果集;
    不能update,delete,數(shù)據(jù)庫表;
  3. 必須return 一個(gè)標(biāo)量值或表變量
  自定義函數(shù)一般用在復(fù)用度高,功能簡(jiǎn)單單一,爭(zhēng)對(duì)性強(qiáng)的地方。

二、存儲(chǔ)過程

  1. 不能返回表變量
  2. 限制少,可以執(zhí)行對(duì)數(shù)據(jù)庫表的操作,可以返回?cái)?shù)據(jù)集
  3. 可以return一個(gè)標(biāo)量值,也可以省略return
   存儲(chǔ)過程一般用在實(shí)現(xiàn)復(fù)雜的功能,數(shù)據(jù)操縱方面。
 
=========================================================================
SqlServer存儲(chǔ)過程--實(shí)例
實(shí)例1:只返回單一記錄集的存儲(chǔ)過程。
  表銀行存款表(bankMoney)的內(nèi)容如下
 
Id
userID
Sex
Money
001
Zhangsan

30
002
Wangwu

50
003
Zhangsan

40
 
要求1:查詢表bankMoney的內(nèi)容的存儲(chǔ)過程

create procedure sp_query_bankMoney
as
select * from bankMoney
go
exec sp_query_bankMoney

注* 在使用過程中只需要把T-Sql中的SQL語句替換為存儲(chǔ)過程名,就可以了很方便吧!
實(shí)例2(向存儲(chǔ)過程中傳遞參數(shù)):

加入一筆記錄到表bankMoney,并查詢此表中userID= Zhangsan的所有存款的總金額。

Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output
with encryption ---------加密
as
insert into bankMoney (id,userID,sex,Money)
Values(@param1,@param2,@param3, @param4)
select @param5=sum(Money) from bankMoney where userID='Zhangsan'
go
在SQL Server查詢分析器中執(zhí)行該存儲(chǔ)過程的方法是:
declare @total_price int
exec insert_bank '004','Zhangsan','男',100,@total_price output
print '總余額為'+convert(varchar,@total_price)
go

在這里再啰嗦一下存儲(chǔ)過程的3種傳回值(方便正在看這個(gè)例子的朋友不用再去查看語法內(nèi)容):
1.以Return傳回整數(shù)
2.以output格式傳回參數(shù)
3.Recordset

傳回值的區(qū)別:

output和return都可在批次程式中用變量接收,而recordset則傳回到執(zhí)行批次的客戶端中。
實(shí)例3:使用帶有復(fù)雜 SELECT 語句的簡(jiǎn)單過程
  下面的存儲(chǔ)過程從四個(gè)表的聯(lián)接中返回所有作者(提供了姓名)、出版的書籍以及出版社。該存儲(chǔ)過程不使用任何參數(shù)。

USE pubs
IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'au_info_all' AND type = 'P')
  DROP PROCEDURE au_info_all
GO
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
  FROM authors a INNER JOIN titleauthor ta
   ON a.au_id = ta.au_id INNER JOIN titles t
   ON t.title_id = ta.title_id INNER JOIN publishers p
   ON t.pub_id = p.pub_id
GO
  au_info_all 存儲(chǔ)過程可以通過以下方法執(zhí)行:
  EXECUTE au_info_all
-- Or
EXEC au_info_all
  如果該過程是批處理中的第一條語句,則可使用:
  au_info_all

實(shí)例4:使用帶有參數(shù)的簡(jiǎn)單過程

  CREATE PROCEDURE au_info
  @lastname varchar(40),
  @firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
  FROM authors a INNER JOIN titleauthor ta
   ON a.au_id = ta.au_id INNER JOIN titles t
   ON t.title_id = ta.title_id INNER JOIN publishers p
   ON t.pub_id = p.pub_id
  WHERE au_fname = @firstname
   AND au_lname = @lastname
GO
  au_info 存儲(chǔ)過程可以通過以下方法執(zhí)行:
  EXECUTE au_info 'Dull', 'Ann'
-- Or
EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'
-- Or
EXEC au_info 'Dull', 'Ann'
-- Or
EXEC au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXEC au_info @firstname = 'Ann', @lastname = 'Dull'
  如果該過程是批處理中的第一條語句,則可使用:
  au_info 'Dull', 'Ann'
-- Or
au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
au_info @firstname = 'Ann', @lastname = 'Dull'

實(shí)例5:使用帶有通配符參數(shù)的簡(jiǎn)單過程

CREATE PROCEDURE au_info2
@lastname varchar(30) = 'D%',
@firstname varchar(18) = '%'
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
  ON a.au_id = ta.au_id INNER JOIN titles t
  ON t.title_id = ta.title_id INNER JOIN publishers p
  ON t.pub_id = p.pub_id
WHERE au_fname LIKE @firstname
  AND au_lname LIKE @lastname
GO
  au_info2 存儲(chǔ)過程可以用多種組合執(zhí)行。下面只列出了部分組合:
  EXECUTE au_info2
-- Or
EXECUTE au_info2 'Wh%'
-- Or
EXECUTE au_info2 @firstname = 'A%'
-- Or
EXECUTE au_info2 '[CK]ars[OE]n'
-- Or
EXECUTE au_info2 'Hunter', 'Sheryl'
-- Or
EXECUTE au_info2 'H%', 'S%'
  = 'proc2'

實(shí)例6:if...else
存儲(chǔ)過程,其中@case作為執(zhí)行update的選擇依據(jù),用if...else實(shí)現(xiàn)執(zhí)行時(shí)根據(jù)傳入的參數(shù)執(zhí)行不同的修改.

--下面是if……else的存儲(chǔ)過程:
if exists (select 1 from sysobjects where name = 'Student' and type ='u' )
drop table Student
go
if exists (select 1 from sysobjects where name = 'spUpdateStudent' and type ='p' )
drop proc spUpdateStudent
go
create table Student
(
fName nvarchar (10),
fAge
smallint ,
fDiqu varchar (50),
fTel int
)
go
insert into Student values ('X.X.Y' , 28, 'Tesing' , 888888)
go
create proc spUpdateStudent
(
@fCase int ,
@fName nvarchar (10),
@fAge smallint ,
@fDiqu varchar (50),
@fTel int
)
as
update Student
set fAge = @fAge, -- 傳 1,2,3 都要更新 fAge 不需要用 case
fDiqu = (case when @fCase = 2 or @fCase = 3 then @fDiqu else fDiqu end ),
fTel = (case when @fCase = 3 then @fTel else fTel end )
where fName = @fName
select * from Student
go
-- 只改 Age
exec spUpdateStudent
@fCase = 1,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel = 1010101
-- 改 Age 和 Diqu
exec spUpdateStudent
@fCase = 2,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel = 1010101
-- 全改
exec spUpdateStudent
@fCase = 3,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel = 1010101

相關(guān)文章

  • Sql數(shù)據(jù)庫中去掉字段的所有空格小結(jié)篇

    Sql數(shù)據(jù)庫中去掉字段的所有空格小結(jié)篇

    這篇文章主要介紹了Sql數(shù)據(jù)庫中去掉字段的所有空格小結(jié)篇,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • SQL_Server全文索引的用法解析

    SQL_Server全文索引的用法解析

    SQL Server全文索引相信大家都有一定的了解,下面就為您介紹SQL Server全文索引的用法及相關(guān)的語句,希望可以讓您對(duì)SQL Server全文索引能有更深的認(rèn)識(shí)
    2013-07-07
  • 查看sql?server服務(wù)器日志流程步驟

    查看sql?server服務(wù)器日志流程步驟

    這篇文章主要為大家介紹了查看sql?server服務(wù)器日志流程步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • sqlserver 數(shù)據(jù)庫連接字符串中的可選項(xiàng)收集

    sqlserver 數(shù)據(jù)庫連接字符串中的可選項(xiàng)收集

    sqlserver 數(shù)據(jù)庫連接字符串中的可選項(xiàng)收集,需要的朋友可以參考下。
    2011-10-10
  • SQL語句查詢數(shù)據(jù)庫中重復(fù)記錄的個(gè)數(shù)

    SQL語句查詢數(shù)據(jù)庫中重復(fù)記錄的個(gè)數(shù)

    一個(gè)sql語句:一個(gè)表test有四個(gè)字段id,a,b,c,如果表中的記錄有三個(gè)字段a,b,c都相等,則說明這條記錄是相同的,求相同的記錄的個(gè)數(shù) 。
    2009-11-11
  • SQL Server的徹底卸載方法步驟

    SQL Server的徹底卸載方法步驟

    可能大家已經(jīng)有深刻體會(huì),SQL Server的卸載十分繁瑣,本文主要介紹了SQL Server的徹底卸載方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • sqlserver 復(fù)制表 復(fù)制數(shù)據(jù)庫存儲(chǔ)過程的方法

    sqlserver 復(fù)制表 復(fù)制數(shù)據(jù)庫存儲(chǔ)過程的方法

    復(fù)制整個(gè)SqlServer數(shù)據(jù)庫的問題的比較好的方法
    2008-02-02
  • sql中的regexp與like區(qū)別實(shí)現(xiàn)

    sql中的regexp與like區(qū)別實(shí)現(xiàn)

    本文詳細(xì)介紹了正則表達(dá)式REGEXP和LIKE語句的用途,使用它們進(jìn)行模式匹配,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • SqlServer異常處理常用步驟

    SqlServer異常處理常用步驟

    SQL Server常見的問題主要是SQL問題造成,常見的主要是CPU過高和阻塞。關(guān)于SqlServer異常處理常用步驟有哪些呢?大家了解嗎?下面小編通過本篇文章給大家介紹SqlServer異常處理常用步驟,感興趣的朋友一起看看吧
    2015-11-11
  • 淺析SQL存儲(chǔ)過程和事務(wù)處理

    淺析SQL存儲(chǔ)過程和事務(wù)處理

    在Sql Server數(shù)據(jù)庫的存儲(chǔ)過程中如何使用事務(wù)來完成數(shù)據(jù)的批量操作呢?下面小編就詳細(xì)的為大家介紹一下。需要的朋友可以過來參考參考
    2013-08-08

最新評(píng)論

保亭| 鄢陵县| 名山县| 龙泉市| 阳山县| 贵阳市| 临洮县| 东乌| 大同县| 洞头县| 石台县| 昌邑市| 偃师市| 梓潼县| 叙永县| 梁平县| 沐川县| 富顺县| 西华县| 云梦县| 灵璧县| 绥化市| 石家庄市| 巴彦县| 南昌县| 阳泉市| 万州区| 上栗县| 通渭县| 沂水县| 新疆| 额尔古纳市| 高安市| 鄱阳县| 隆昌县| 肃宁县| 防城港市| 金坛市| 定陶县| 屏边| 汝南县|