當前位置:首頁 » 存儲配置 » 存儲過程取非

存儲過程取非

發布時間: 2022-06-09 22:56:58

存儲過程的編寫

我是這樣理解的:
1、要求根據UserId,查T_Mail_User表,得到MailId,再查T_Mail表獲得郵件。
2、同時可以獲得用戶的收藏郵件。即不但提供UserId輸入,而且提供「是否要取收藏記錄」的輸入參數。
3、同時支持條件查詢,比如,按發送日期等查詢,默認1=1,即沒有條件語句。
這樣,存儲過程中關鍵的語句為
if(@filterString is null)
set @filterString='1=1'
declare cmdStr char(256)
if(isGetFavorite)
set cmdStr='select b.* from T_Mail_User a,T_Mail b
where a.isFavorite=1 and a.UserId=@userId and a.MailId=b.MailId and a.MailType=0 and '+@filterString
else
...a.isFavorite=0...
exec(cmdStr)
上面假設收件箱標識為0,如果參數化,此存儲過程也可用於查用戶的發件箱等。
上面的@filterString就是條件字元串,或者『1=1』可能由前台提供,此時不必要第一個if。

㈡ 對於存儲過程這塊我完全是空白,在網上找的資料看也是事事而非,希望能得到些建議!

其實我也是對這個東西不是很了解·
後來我慢慢知道
它其實就是用來進行帶參數運行select 語句
它就是一種思維
給你個例子
Create Proc Com_professSelect
@profess varchar(8)
AS
if @profess is NULL or @profess=''
Return 55
if Not Exists(Select* From Student_info
Where profess=@profess)
Return 56
Select Student_info.sid# '學號',sname '姓名',gender '性別',profess '專業',
aname '程序語言', fname '外語', sphone '聯系電話',semail '電子郵件'
From Student_info Join Std_ForeignLang
On Student_info.sid#=Std_ForeignLang.sid#
Join Std_Prolanguage
On Student_info.sid#=Std_Prolanguage.sid#
Where Student_info.profess Like @profess
Return

Use Std_interviewDB
Declare @status int
Declare @profess varchar(11)
Exec @status=Com_professSelect @profess='信息安全'
if @status=55
Print '你沒有輸入要查詢的專業,請輸入外語的名稱'
else if @status=56
Print '沒有找到會你需要查詢的專業的學生相關信息'
再者 他就是一種格式
像觸發器啊 什麼的 格式跟它很像
Create Trigger view_error
On Record_info
Instead Of Insert--Instead of 不會把修改後的結果插入到表中After會把修改後的結果插入到表中
AS
Declare @sid varchar(11)
Select @sid=sid# From Inserted
If Exists(Select sid# From Record_info
Where sid#=@sid
and pass='是')
Print '你已經被一家公司錄用了!'
差不多了
我也是剛學的sql
希望對你有幫助

㈢ Mysql存儲過程和函數的區別

本質上沒區別。只是函數有如:只能返回一個變數的限制。而存儲過程可以返回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程不行。執行的本質都一樣。
函數限制比較多,比如不能用臨時表,只能用表變數.還有一些函數都不可用等等.而存儲過程的限制相對就比較少
1. 一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。
2. 對於存儲過程來說可以返回參數,而函數只能返回值或者表對象。
3. 存儲過程一般是作為一個獨立的部分來執行(EXEC執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。
4. 當存儲過程和函數被執行的時候,SQL Manager會到procere cache中去取相應的查詢語句,如果在procere cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯

㈣ DB2中建立存儲過程的詳細參數和語法

DECLARE CHOICE2 CURSOR WITH RETURN TO CALLER FOR --聲明游標 CHOICE2
SELECT COMPANYID,DEPTID,SEQID,SUBMITTIME,SUBMITDATE,
B.GRADEDESC HYEAR,PRODUCTID,PRODUCTCODE,PRODUCTDESC,
A.GRADEID,PRICE,SFZDPY,LQUANT,MQUANT,MCQUANT,LCQUANT,
UQUANT,OTHQUANT1,OTHQUANT2,OTHQUANT3,OTHQUANT4,EMP1,EMP2,STATUS,A.REMARK,
DECIMAL(ABS(MCQUANT-MQUANT)/NULLIF(MQUANT,0)*100,10,2)TAG
FROM T_SUPPLY_PPB_HY A
LEFT JOIN T_SUPPLY_GRADATION B ON A.GRADEID=B.GRADEID
WHERE HYEAR=TO_CHAR(P_NF)||P_BN
ORDER BY B.GRADEID,PRODUCTCODE,A.PRICE;

--1.DECIMAL(P,S)十進制數,小數點位置由數字的精度(P)和小數位(S)確定。
-- 精度是數字的總位數,必須小於32。小數位是小數部分數字的位數且總是小於或等於精度值。
-- 如果未指定精度和小數位,則十進制值的預設精度為5,預設小數位為0。
--2.語法:NULLIF ( expression , expression )
-- expression:(常量、列名、函數、子查詢或算術運算符、按位運算符以及字元串運算符的任意組)
-- 如果兩個表達式不相等,NULLIF 返回第一個 expression 的值。如果相等,NULLIF 返回第一個 expression 類型的空值。如果兩個表達式相等且結果表達式為 NULL,NULLIF 等價於 CASE 的搜索函數。

㈤ 什麼是存儲過程

定義:
將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
講到這里,可能有人要問:這么說存儲過程就是一堆SQL語句而已啊?
Microsoft公司為什麼還要添加這個技術呢?
那麼存儲過程與一般的SQL語句有什麼區別呢?
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
存儲過程的種類:
1.系統存儲過程:以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作,
如 sp_help就是取得指定對象的相關信息
2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用戶自定義的存儲過程,這是我們所指的存儲過程
常用格式
Create procere procee_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解釋:
output:表示此參數是可傳回的
with {recompile|encryption}
recompile:表示每次執行此存儲過程時都重新編譯一次
encryption:所創建的存儲過程的內容會被加密
如:
表book的內容如下
編號 書名 價格
001 C語言入門 $30
002 PowerBuilder報表開發 $52
實例1:查詢表Book的內容的存儲過程
create proc query_book
as
select * from book
go
exec query_book
實例2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(編號,書名,價格) Values(@param1,@param2,@param3)
select @param4=sum(價格) from book
go
執行例子:
declare @total_price money
exec insert_book '003','Delphi 控制項開發指南',$100,@total_price
print '總金額為'+convert(varchar,@total_price)
go
存儲過程的3種傳回值:
1.以Return傳回整數
2.以output格式傳回參數
3.Recordset
傳回值的區別:
output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中
實例3:設有兩個表為Proct,Order,其表內容如下:
Proct
產品編號 產品名稱 客戶訂數
001 鋼筆 30
002 毛筆 50
003 鉛筆 100
Order
產品編號 客戶名 客戶訂金
001 南山區 $30
002 羅湖區 $50
003 寶安區 $4
請實現按編號為連接條件,將兩個表連接成一個臨時表,該表只含編號.產品名.客戶名.訂金.總金額,
總金額=訂金*訂數,臨時表放在存儲過程中
代碼如下:
Create proc temp_sale
as
select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額
into #temptable from Proct a inner join Order b on a.產品編號=b.產品編號
if @@error=0
print 'Good'
else
&n bsp; print 'Fail'
go

存儲過程介紹
一、先介紹一下什麼是存儲過程
存儲過程是利用SQL Server所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的Pro-SQL和Informix的資料庫系統能夠中的Informix-4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數

二、存儲過程的書寫格

CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行

其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:

@參數名 數據類型 [VARYING] [=內定值] [OUTPUT]

每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
[=內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數,同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。

例子:
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id

例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序

三、在SQL Server中執行存儲過程

在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt

以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果

sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。

存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化 後存儲在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯系的過程可以組合在一起構成程序包。
使用存儲過程有以下的優點:
* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可 以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。
* 可保證數據的安全性和完整性。
# 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。
# 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執 行。
* 可以降低網路的通信量。
* 使體現企業規則的運算程序放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改 任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運 算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序 工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可 以了,應用程序無須任何變化。

㈥ sqlserver 存儲過程 菜鳥求助 非技術性問題很簡單

關於 set ANSI_NULLS ON
當 SET ANSI_NULLS 為 ON 時,如果比較中有一個或多個表達式為 NULL,則既不輸出 TRUE 也不輸出 FALSE,而是輸出 UNKNOWN。這是因為未知值不能與其他任何值進行邏輯比較。這種情況發生在一個表達式與 NULL 單詞進行比較,或者兩個表達式相比,而其中一個表達式取值為 NULL 時。

關於 set QUOTED_IDENTIFIER ON
當 SET QUOTED_IDENTIFIER 為 ON 時,標識符可以由雙引號分隔,而文字必須由單引號分隔。當 SET QUOTED_IDENTIFIER 為 OFF 時,標識符不可加引號,且必須符合所有 Transact-SQL 標識符規則。有關詳細信息,請參閱標識符。文字可以由單引號或雙引號分隔。

當 SET QUOTED_IDENTIFIER 為 ON(默認值)時,由雙引號分隔的所有字元串都被解釋為對象標識符。因此,加引號的標識符不必符合 Transact-SQL 標識符規則。它們可以是保留關鍵字,並且可以包含 Transact-SQL 標識符中通常不允許的字元。不能使用雙引號分隔文字字元串表達式,而必須用單引號括住文字字元串。如果單引號 (') 是文字字元串的一部分,則可以由兩個單引號 (") 表示。當對資料庫中的對象名使用保留關鍵字時,SET QUOTED_IDENTIFIER 必須為 ON。

當 SET QUOTED_IDENTIFIER 為 OFF 時,表達式中的文字字元串可以由單引號或雙引號分隔。如果文字字元串由雙引號分隔,則可以在字元串中包含嵌入式單引號,如省略號。

當在計算列或索引視圖上創建或更改索引時,SET QUOTED_IDENTIFIER 必須為 ON。如果 SET QUOTED_IDENTIFIER 為 OFF,則計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關計算列的索引視圖和索引所必需的 SET 選項設置的詳細信息,請參閱 SET (Transact-SQL) 中的「使用 SET 語句時的注意事項」。

在進行連接時,SQL Server Native Client ODBC 驅動程序和 SQL Server Native Client OLE DB Provider for SQL Server 自動將 QUOTED_IDENTIFIER 設置為 ON。這可以在 ODBC 數據源、ODBC 連接特性或 OLE DB 連接屬性中進行配置。對來自 DB-Library 應用程序的連接,SET QUOTED_IDENTIFIER 默認設置為 OFF。

創建表時,即使此時將 QUOTED IDENTIFIER 選項設置為 OFF,該選項在表的元數據中仍始終存儲為 ON。

創建存儲過程時,將捕獲 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設置,並用於該存儲過程的後續調用。

在存儲過程內執行 SET QUOTED_IDENTIFIER 時,其設置不更改。

當 SET ANSI_DEFAULTS 為 ON 時,將啟用 SET QUOTED_IDENTIFIER。

SET QUOTED_IDENTIFIER 還與 ALTER DATABASE 的 QUOTED_IDENTIFER 設置相對應。有關資料庫設置的詳細信息,請參閱 ALTER DATABASE (Transact-SQL) 和設置資料庫選項。

SET QUOTED_IDENTIFIER 是在分析時進行設置的。在分析時進行設置意味著:SET 語句只要出現在批處理或存儲過程中即生效,與代碼執行實際上是否到達該點無關;並且 SET 語句在任何語句執行之前生效。

關於 ALTER PROCEDURE [dbo].[sp_XXXX] (這句不明白)
這個是 修改 存儲過程 [dbo].[sp_XXXX]

DECLARE @sql NVARCHAR(4000)
這個是定義一個變數 名稱為 @sal 數據類型為 NVARCHAR(4000)

㈦ mysql存儲過程如何拿到非select語句的結果集

把結果 復制到excel表。。。,
那隻能通過 找系統表 然後用 select 吧

㈧ 存儲過程 臨時表 非得要這句話

可以不要,你可以直接把此變數代表的內容嵌入到語句中即可

㈨ 寫了存儲過程還需要過濾非法字元嗎

不用,不會出現系統崩潰的!傳參數的方法也不用過濾字元。

㈩ 什麼是存儲過程有什麼優點

存儲過程是事先經過編譯並存儲在資料庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。

優點:

1、重復使用:存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。

2、減少網路流量:存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。

3、安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。

(10)存儲過程取非擴展閱讀

存儲過程的缺點:

1、更改比較繁瑣:如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣。

2、可移植性差:由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則需要將業務邏輯封裝在不特定於 RDBMS 的中間層中。

熱點內容
androidgithub開源項目 發布:2024-05-01 05:30:13 瀏覽:618
凱思奇指紋鎖初始密碼多少 發布:2024-05-01 05:26:05 瀏覽:628
電腦設置禁止配置怎麼取消 發布:2024-05-01 05:07:43 瀏覽:409
演算法應該是 發布:2024-05-01 04:53:36 瀏覽:528
如何遠程伺服器軟體 發布:2024-05-01 04:37:05 瀏覽:395
保定編程家教 發布:2024-05-01 04:00:28 瀏覽:377
qq客戶端源碼 發布:2024-05-01 03:37:01 瀏覽:844
山西時間同步伺服器雲空間 發布:2024-05-01 03:27:20 瀏覽:549
iis運行php 發布:2024-05-01 03:12:22 瀏覽:179
linux字體下載 發布:2024-05-01 02:53:31 瀏覽:738