欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      面試SQL

      時間:2019-05-13 16:27:18下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《面試SQL》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《面試SQL》。

      第一篇:面試SQL

      1.存儲過程和函數(shù)的區(qū)別 2.事務(wù)是什么?

      3.游標(biāo)的作用?如何知道游標(biāo)已經(jīng)到了最后?

      4.觸發(fā)器分為事前觸發(fā)和事后觸發(fā),這兩種觸發(fā)有和區(qū)別。語句級觸發(fā)和行級觸發(fā)有何區(qū)別。

      1。用C#實現(xiàn)以下功能

      a 產(chǎn)生一個int數(shù)組,長度為100,并向其中隨機插入1-100,并且不能重復(fù)。b 對上面生成的數(shù)組排序,需要支持升序、降序兩種順序

      2。請說明在.net中常用的幾種頁面間傳遞參數(shù)的方法,并說出他們的優(yōu)缺點。3。請說明.net中的錯誤處理機制,并舉例 4。請說出強名的含義

      5。請列出c#中幾種循環(huán)的方法,并指出他們的不同 6。請指出.net中所有類型的基類 7。請指出GAC的含義

      8。SQL SREVER中,向一個表中插入了新數(shù)據(jù),如何快捷的得到自增量字段的當(dāng)前值

      您在什么情況下會用到虛方法?它與接口有什么不同? Q:Override與重載有什么區(qū)別? Q:值類型與引用類型有什么區(qū)別? Q:怎樣理解靜態(tài)變量?

      Q:向服務(wù)器發(fā)送請求有幾種方式?

      Q:DataReader與Dataset有什么區(qū)別?

      Q:如果在一個B/S結(jié)構(gòu)的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理?

      Q:用.net做B/S結(jié)構(gòu)的系統(tǒng),您是用幾層結(jié)構(gòu)來開發(fā),每一層之間的關(guān)系以及為什么要這樣分層?

      Q:軟件開發(fā)過程一般有幾個階段?每個階段的作用?

      Q:微軟推出了一系列的Application Block,請舉出您所知道的Application Block并說明其作用?

      Q:請列舉一些您用到過的設(shè)計模式以及在什么情況下使用該模式? Q:您對WebService的體會?

      Q:您對編程的興趣如何?工作中遇到不懂的問題是怎樣去解決的?您一般怎樣去提高自己的編程水平? Q:您離職的原因是什么?

      Q:通過超鏈接怎樣傳遞中文參數(shù)?

      Q:請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty? Q:請編程實現(xiàn)一個冒泡排序算法?

      1、override與重載的區(qū)別

      2、.net的錯誤處理機制是什么

      3、C#中接口和類的異同

      4、DataReader和DataSet的異同 1.有哪幾種方法可以實現(xiàn)一個類存取另外一個類的成員函數(shù)及屬性,并請舉列來加以說明和分析.2.如果需記錄類的實例個數(shù),該如何實現(xiàn),請寫一個簡單的類于以證明.3.A類是B類的基類,并且都有自己的構(gòu)造,析構(gòu)函數(shù),請舉例證明B類從實例化到消亡過程中構(gòu)造,析構(gòu)函數(shù)的執(zhí)行過程.4.需要實現(xiàn)對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保留一個空格,即允許字符串中間有多個空格,但連續(xù)的空格數(shù)不可超過一個.一.填空題

      1.c#中的三元運算符是__?:__ 2.當(dāng)整數(shù)a賦值給一個object對象時,整數(shù)a將會被__裝箱(封裝)___? 3.類成員有_____種可訪問形式? this.;new Class().Method;4.public static const int A=1;這段代碼有錯誤么?是什么? const不能用static修飾

      5.float f=-123.567F;int i=(int)f;i的值現(xiàn)在是_____? 123 6.利用operator聲明且僅聲明了“==”,有什么錯誤么? 7.委托聲明的關(guān)鍵字是______? delagete 8.用sealed修飾的類有什么特點?密封,不能繼承

      9.在Asp.net中所有的自定義用戶控件都必須繼承自________?Control 10.在.Net中所有可序列化的類都被標(biāo)記為_____? 11.在.Net托管代碼中我們不用擔(dān)心內(nèi)存漏洞,這是因為有了______?gc 12.下面的代碼中有什么錯誤嗎?_______ using System;class A { public virtual void F(){ Console.WriteLine(“A.F”);} } abstract class B:A { public abstract override void F();// new public abstract void F();} 13.當(dāng)類T只聲明了私有實例構(gòu)造函數(shù)時,則在T的程序文本外部,___可以___(可以 or 不可以)從T派生出新的類,不可以____(可以 or 不可以)直接創(chuàng)建T的任何實例。

      14.下面這段代碼有錯誤么? switch(i){ case(): CaseZero();break;case 1: CaseOne();break;case 2: dufault;//wrong CaseTwo();break;} 15.在.Net中,類System.Web.UI.Page 可以被繼承么?可以

      二.簡答題

      1.在c#中using和new這兩個關(guān)鍵字有什么意義,請寫出你所知道的意義?using 指令 和語句 new 創(chuàng)建實例 new 隱藏基類中方法 4.談?wù)勵惡徒Y(jié)構(gòu)的區(qū)別?類是引用類型、結(jié)構(gòu)是值類型

      5.一個長度為10000的字符串,通過隨機從a-z中抽取10000個字符組成。請用c#語言編寫主要程序來實現(xiàn)。6.對于這樣的一個枚舉類型: enum Color:byte{ Red, Green, Blue, Orange } string[] ss=Enum.GetNames(typeof(Color));byte[] bb=Enum.GetValues(typeof(Color));試寫一段程序顯示出枚舉類型中定義的所有符號名稱以及它們對應(yīng)的數(shù)值。7.您了解設(shè)計模式么?請列出您所知道的設(shè)計模式的名稱。// 8.請在SQL Server中設(shè)計表來保存一個樹狀結(jié)構(gòu)的組織結(jié)構(gòu)圖(假設(shè)結(jié)構(gòu)圖中只有名稱這一項內(nèi)容需要保存),如果我想查詢某一職位下的所有職位,用一個存儲過程來實現(xiàn),你有什么思路?

      9.什么叫做SQL注入,如何防止?請舉例說明。10.下面這段代碼輸出什么?為什么? int i=5;int j=5;if(Object.ReferenceEquals(i,j))Console.WriteLine(“Equal”);else Console.WriteLine(“Not Equal”);//不相等,因為比較的是對象

      1.寫一個實現(xiàn)對一段字符串翻轉(zhuǎn)的方法,附加一些條件,如其中包括“,”、“.”,對其設(shè)計測試用 例。

      2.對一支紙杯設(shè)計測試用例(可以是廣義的杯,不一定是某一支特定功能的杯)開發(fā)語言概念題 3.什么是反射?

      4.用Singleton如何寫設(shè)計模式 5.C#中的垃圾回收機制是怎樣的? 6.什么是Application Pool?

      7.鏈表和數(shù)組的區(qū)別,各有什么優(yōu)缺點.8.Remoting在客戶端服務(wù)器怎么實現(xiàn) ? 9.什么是友元函數(shù)?

      10.用標(biāo)準(zhǔn)C如何實現(xiàn)多態(tài)? 11.什么是虛函數(shù)? 12.什么是抽象函數(shù)?

      13.什么是內(nèi)存泄漏,怎樣最簡單的方法判斷被存泄漏 ? 英語題

      14.用英文介紹一下使用C#/C++做的項目,主要功能

      15.如果要與美國開電話會議,會如何與美國的工程師溝通 16.如果老板認(rèn)為你的技術(shù)落后,你會怎么回答

      數(shù)據(jù)庫知識題

      17.使用什么工具來調(diào)用存儲過程

      18.SQL Server的兩種索引是何形式?索引的作用?索引的優(yōu)缺點? 19.觸發(fā)器的作用 其它知識題及問題

      20.什么是Web Service? 21.什么是XML?

      22.Socket怎么實現(xiàn)?

      問題描述:

      為管理崗位業(yè)務(wù)培訓(xùn)信息,建立3個表:

      S(S#,SN,SD,SA)S#,SN,SD,SA 分別代表學(xué)號、學(xué)員姓名、所屬單位、學(xué)員年齡

      C(C#,CN)C#,CN 分別代表課程編號、課程名稱

      SC(S#,C#,G)S#,C#,G 分別代表學(xué)號、所選修的課程編號、學(xué)習(xí)成績--1.使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程名稱為’稅收基礎(chǔ)’的學(xué)員學(xué)號和姓名

      SELECT SN,SD FROM S WHERE [S#] IN(SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#]AND CN='稅收基礎(chǔ)')--2.使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程編號為’C2’的學(xué)員姓名和所屬單位 SELECT S.SN,S.SD FROM S,SC WHERE S.[S#]=SC.[S#] AND SC.[C#]='C2'--3.使用標(biāo)準(zhǔn)SQL嵌套語句查詢不選修課程編號為’C5’的學(xué)員姓名和所屬單位

      SELECT SN,SD FROM S WHERE [S#] NOT IN(SELECT [S#] FROM SC WHERE [C#]='C5')--4.使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修全部課程的學(xué)員姓名和所屬單位 SELECT SN,SD FROM S WHERE [S#] IN(SELECT [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))--5.查詢選修了課程的學(xué)員人數(shù)

      SELECT 學(xué)員人數(shù)=COUNT(DISTINCT [S#])FROM SC--6.查詢選修課程超過5門的學(xué)員姓名和所屬單位

      SELECT SN,SD FROM S WHERE [S#] IN(SELECT [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5)

      --7.學(xué)生所有的成績表單

      SELECT S.S# as 學(xué)號,S.SN as 姓名,S.SD AS 職業(yè) , SS.[語文],SS.[英語] ,SS.[數(shù)學(xué)],SS.[政治],SS.[物理],SS.[化學(xué)] FROM S ,(SELECT SC1.S#,[語文]=SC1.G ,[英語]=SC2.G ,[數(shù)學(xué)]=SC3.G,[政治]=SC4.G,[物理]=SC5.G,[化學(xué)]=SC6.G from SC SC1,SC SC2,SC SC3,SC SC4,SC SC5,SC SC6,C C1,C C2 ,C C3,C C4,C C5,C C6 WHERE C1.C#=SC1.C# AND C2.C#=SC2.C# AND C3.C#=SC3.C# AND C4.C#=SC4.C# AND C5.C#=SC5.C# AND C6.C#=SC6.C# AND SC1.S#=SC2.S# and SC2.S#=SC3.S# and SC3.S#=SC4.S# and SC4.S#=SC5.S# and SC5.S#=SC6.S# AND C1.CN='語文' AND C2.CN='英語' AND C3.CN='數(shù)學(xué)' AND C4.CN='政治' AND C5.CN='物理' AND C6.CN='化學(xué)')SS WHERE S.S#=SS.S#--and S.S#='1'

      --8.列出有二門以上(含兩門)不及格課程的學(xué)生姓名及其平均成績 SELECT S.S#,S.SN,AVG_SCGRADE=AVG(SC.G)FROM S,SC,(SELECT S# FROM SC WHERE G<60 GROUP BY S# HAVING COUNT(DISTINCT C#)>=2)A WHERE S.S#=A.S# AND SC.S#=A.S# GROUP BY S.S#,S.SN

      第二篇:復(fù)習(xí)資料(SQL)

      以下復(fù)習(xí)資料僅供考試前作為復(fù)習(xí)的參考提綱,考試期間不得攜帶任何資料進入考場,切記!

      一、將以下概念理解并牢記。

      1、簡述SQL Server查詢分析器作用?

      用于執(zhí)行SQL語句,查看結(jié)果和分析查詢計劃等。

      2、在SQL Server2000中數(shù)據(jù)庫文件有哪幾類?各有什么作用? a.主數(shù)據(jù)庫文件:用于存儲數(shù)據(jù)庫的啟動信息和部分或全部數(shù)據(jù)。b.輔助數(shù)據(jù)庫文件:用于存儲主數(shù)據(jù)文件沒有存儲的其他數(shù)據(jù)。c.事務(wù)日志文件:用于存儲數(shù)據(jù)庫的修改信息。

      3、SQL Server平臺有幾個系統(tǒng)數(shù)據(jù)庫?功能分別是什么? a.master數(shù)據(jù)庫;記錄SQL Server數(shù)據(jù)庫系統(tǒng)中的全部信息。b.model數(shù)據(jù)庫;是所有數(shù)據(jù)庫和tempdb數(shù)據(jù)庫的創(chuàng)建模板。c.tempdb數(shù)據(jù)庫;系統(tǒng)的臨時數(shù)據(jù)庫。

      d.msdb數(shù)據(jù)庫;所有任務(wù)調(diào)度,報警,操作員都存儲在里面,以及存儲備份歷史。

      e.Northwind數(shù)據(jù)庫;方便學(xué)習(xí)數(shù)據(jù)庫系統(tǒng)提供的樣本數(shù)據(jù)庫。f.pubs數(shù)據(jù)庫;方便學(xué)習(xí)數(shù)據(jù)庫系統(tǒng)提供的樣本數(shù)據(jù)庫。

      4、SQL Server包括哪些數(shù)據(jù)庫對象?

      表,索引,視圖,關(guān)系圖表,默認(rèn),規(guī)則,觸發(fā)器,存儲過程,用戶。

      5、SQL Server中包括幾種約束?各自的功能是什么? a.主鍵約束:可以唯一地標(biāo)識表中的每一行。b.唯一約束:用于指定一個或多個列的組合值是唯一性,以防止在列中輸入重復(fù)的值。

      c.檢查約束:保證數(shù)據(jù)庫數(shù)據(jù)的完整性。d.默認(rèn)值約束:可以為指定列定義一個默認(rèn)值。e.空值約束:意味用戶還未為該列輸入值。f.外鍵約束:用來維護兩個表之間數(shù)據(jù)的一致性。

      6、在指定數(shù)據(jù)源部分,表的連接包括幾種?在查詢結(jié)果上有什么不同?

      a.交叉連接:集的行是兩個表的行數(shù)的乘積,集的列是兩個表的列數(shù)之和。

      b.內(nèi)連接:記錄的是兩個表中記錄的交集。

      c.外連接:左外連接:有t1(左),t2表(右),連接結(jié)果包含t1表中的全部記錄和t2表中的相關(guān)記錄。

      右外連接:有t1,t2表,連接結(jié)果包含t2表中的全部記錄和t1表中的相關(guān)記錄。

      全外連接:顯示內(nèi)連接的記錄和兩個表中不符合條件的全部記錄,并在左表或右表相應(yīng)位置設(shè)置null。

      d.自連接:顯示同一個表中一個字段值相同,其他字段不同的信息。

      7、根據(jù)個人理解給出,完成一個表的創(chuàng)建,需要經(jīng)過哪幾個步驟? A.定義表的結(jié)構(gòu); B.設(shè)置約束; C.添加表數(shù)據(jù)。

      8、備份包括幾種?各有什么特點?

      a.完整數(shù)據(jù)庫備份:包括完整的數(shù)據(jù)庫信息。

      b.差異性數(shù)據(jù)庫備份:復(fù)制自上一次完整數(shù)據(jù)庫備份之后修改過的數(shù)據(jù)庫頁。

      c.事務(wù)日志備份:數(shù)據(jù)庫恢復(fù)模型必須是完整恢復(fù)模型或是批量日志恢復(fù)模型。

      d.文件或文件組備份:必須與事務(wù)日志備份結(jié)合才有意義。

      9、簡述SQL Server企業(yè)管理器作用? 功能強大的圖形化數(shù)據(jù)庫管理工具

      二、在復(fù)習(xí)的過程中,自行上機運行以下程序題,以便掌握響應(yīng)的知識點。

      1、編寫一條SELECT語句,從Leixing表中查詢一次性交易金額在1000元以上的交易類型信息。

      SELECT FROM Leixing WHERE ‘交易金額’ in(‘>1000’)

      2、編寫一條UPDATE語句,將Leixing表中ShouzhiLX為“投資”的更改為“股票”。

      UPDATE Leixing SET ShouzhiLX=’投資’ WHERE ShouzhiLX=’股票’

      3、編寫一條DELETE語句,刪除Leixing表中ShouzhiLX為“旅游”的項目,對此不再進行消費。Select from Leixing DELETE from ShouzhiLX where ‘旅游’

      4、使用CREATE DATABASE語句創(chuàng)建以你的姓名拼音命名的數(shù)據(jù)庫,如姓名為張三,創(chuàng)建的數(shù)據(jù)庫的名稱是zhangsan,包括mdf文件,1個ndf文件和ldf文件,各個文件的屬性可以自行設(shè)置。create database linzitai on primary(name=linzitai_Data,filename=’d:linzitai_Data.mdf’, size=10MB,maxsize=50MB,filegrowth=25%),(name=linzitai_Data1,filename=’d:linzitai_Data1.ndf’, size=20MB,maxsize=50MB,filegrowth=40%)log on(name=linzitai_log,filename=’d:linzitai_log.ldf’, size=10MB,maxsize=unlimited,filegrowth=2MB)go

      5、使用CREATE TABLE語句分別創(chuàng)建gerenlicai數(shù)據(jù)庫中的4個表,包ShouzhiMX、Leixing、Zhanghu、YonghuXX,并且在4個表中各自設(shè)置主鍵,在Leixing和ShouzhiMX之間建立外鍵,在Zhanghu和ShouzhiMX之間建立外鍵。(以上操作都要求通過SQL語句實現(xiàn))①.create table YonghuXX(YHBianhao int NOT NULL, DengLuM varchar(32)primary key, Mima varchar(32), QuanXian int)在Leixing和ShouzhiMX之間建立外鍵: ②.create table ShouzhiMX(SZBianhao int primary key, LXBianhao int, JiaoyiSJ datetime(8), JiaoyiJE money(8), ZHBianhao int)Go create table Leixing(LXBianhao int foreign key references LXBianhao(ShouzhiMX), ShouZhi varchar(50), ShouzhiLX varchar(50), ShouzhiXX varchar(50))Go

      6、在Leixing表和ShouzhiMX表之間建立內(nèi)連接,查詢所有滿足條件的記錄,使用SQL語句完成。

      Select a.LXBianhao from Leixing as a join ShouzhiMX as b on a.LXBianhao=b.LXBianhao

      7、向Zhanghu表添加一條新的賬戶信息,使用SQL語句完成。alter table Zhanghu add 賬戶信息 varchar(50)

      8、編寫一條DELETE語句,刪除ShouzhiMX表中消費在50元以下的數(shù)據(jù)。delete ShouzhiMX where ‘<50’

      第三篇:sql試題

      INNER JOIN操作

      INNER JOIN操作用于組合兩個表中的記錄,只要在公共字段之中有相符的值。可以在任何的 FROM 子句中使用 INNER JOIN 運算。這是最普通的聯(lián)接類型。只要在這兩個表的公共字段之中有相符值,內(nèi)部聯(lián)接將組合兩個表中的記錄。語法:FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數(shù)用于指定從其中組合記錄的表的名稱。

      field1, field2參數(shù)指定被聯(lián)接字段的名稱。如果這些字段不是數(shù)值的,被聯(lián)接的字段必須是相同的數(shù)據(jù)類型,并且包含相同類型的數(shù)據(jù),但是它們不必名稱相同。

      compopr參數(shù)用于指定關(guān)系比較運算符,如:“=”,“<”,“>”,“<=”,“>=”,或 “<>”。

      如果在INNER JOIN操作中要聯(lián)接包含Memo 數(shù)據(jù)類型或 OLE Object 數(shù)據(jù)類型數(shù)據(jù)的字段,將會發(fā)生錯誤。在一個 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

      LEFT JOIN操作

      LEFT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來創(chuàng)建一個左邊外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中并沒有相符值的記錄。語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數(shù)用于指定要將記錄組合的表的名稱。

      field1, field2參數(shù)指定被聯(lián)接的字段的名稱。且這些字段必須有相同的數(shù)據(jù)類型及包含相同類型的數(shù)據(jù),但它們不需要有相同的名稱。

      compopr參數(shù)指定關(guān)系比較運算符:“=”,“<”,“>”,“<=”,“>=” 或 “<>”。如果在INNER JOIN操作中要聯(lián)接包含Memo 數(shù)據(jù)類型或 OLE Object 數(shù)據(jù)類型數(shù)據(jù)的字段,將會發(fā)生錯誤。

      RIGHT JOIN操作

      RIGHT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄。使用 RIGHT JOIN 運算創(chuàng)建一個右邊外部聯(lián)接。右邊外部聯(lián)接將包含了從第二個(右邊)開始的兩個表中的全部記錄,即使在第一個(左邊)表中并沒有匹配值的記錄。語法:FROM table1 RIGHT JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數(shù)用于指定要將記錄組合的表的名稱。

      field1, field2參數(shù)指定被聯(lián)接的字段的名稱。且這些字段必須有相同的數(shù)據(jù)類型及包含相同類型的數(shù)據(jù),但它們不需要有相同的名稱。

      compopr參數(shù)指定關(guān)系比較運算符:“=”,“<”,“>”,“<=”,“>=” 或 “<>”。如果在INNER JOIN操作中要聯(lián)接包含Memo 數(shù)據(jù)類型或 OLE Object 數(shù)據(jù)類型數(shù)據(jù)的字段,將會發(fā)生錯誤。

      你可以把存儲過程當(dāng)做:把一系列語句合并到一起的這么一個整體

      我覺得舉例說明比較好,給你個例子:

      先將【表1】中ID號為50—2000的記錄刪除、再將【表2】中的這些記錄的狀態(tài)(STATUS)改為“已解除”:

      delete 表1 where ID > 50 and ID < 2000

      update 表2 set STATUS = '已解除' where ID > 50 and ID < 2000

      正常情況下,以上兩條語句分步執(zhí)行就可以了,如果要用存儲過程呢?

      先建立存儲過程(以下的語法為Sybase數(shù)據(jù)庫的,其他數(shù)據(jù)庫類同):

      create procedure PRC_TEST(@start_ID int, @end_ID int)as

      begin

      delete 表1 where ID > @start_ID and ID < @end_ID

      update 表2 set STATUS = '已解除' where ID > @start_ID and ID < @end_ID end

      好了,執(zhí)行這個語句,就將存儲過程PRC_TEST提交到數(shù)據(jù)庫里了,它有兩個參數(shù):start_ID int 和 end_ID,代表起始和終止ID號,類型為整數(shù)型int

      怎么用這個存儲過程呢? 這樣執(zhí)行:exc PRC_TEST 50, 2000

      執(zhí)行時,它先得到了兩個參數(shù),50、2000,分別賦值給start_ID int 和 end_ID,然后按照這兩個參數(shù)分步執(zhí)行封裝在存儲過程里的那兩條語句了。

      如果你這樣執(zhí)行:exc PRC_TEST 220, 8660

      就是處理兩個表中ID介于220—8660之間的記錄了。

      --------------

      你也許會問了,既然可以分步執(zhí)行的幾句SQL,為什么要費力的寫成存儲過程?。?/p>

      主要是(我的經(jīng)驗和認(rèn)識):

      1、使數(shù)據(jù)處理參數(shù)化,對經(jīng)常使用的一系列SQL進行封裝,使其成為一個存儲過程的整體,在每次執(zhí)行時只要更換執(zhí)行參數(shù)即可,不用去改里面每句SQL的where子句

      2、★★這個很重要★★,假設(shè)你要循環(huán)處理某些數(shù)據(jù),例如需要使用“游標(biāo)”、“Do...while...語句”…………時,就要用到存儲過程(或觸發(fā)器)

      =======================

      最后給你轉(zhuǎn)一個短文吧,這是書面上的概念:

      將常用的或很復(fù)雜的工作,預(yù)先用SQL語句寫好并用一個指定的名稱存儲起來, 那么以后要叫數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的服務(wù)時,只需調(diào)用execute,即可自動完成命令。

      那么存儲過程與一般的SQL語句有什么區(qū)別呢? 存儲過程的優(yōu)點:

      1.存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。

      2.當(dāng)對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。

      3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量

      4.安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)

      存儲過程的種類:

      1.系統(tǒng)存儲過程:以prc_(或sp_)開頭,用來進行系統(tǒng)的各項設(shè)定.取得信息.相關(guān)管理工作, 如 sp_help就是取得指定對象的相關(guān)信息

      2.擴展存儲過程 以XP_開頭,用來調(diào)用操作系統(tǒng)提供的功能

      exec master..xp_cmdshell 'ping 10.8.16.1'

      3.用戶自定義的存儲過程,這是我們所指的存儲過程

      測試table create table table1(id int,name char)insert into table1 select 1,'q' union all select 2,'r' union all select 3,'3' union all select 4,'5'

      要求按指定的id順序(比如2,1,4,3)排列獲取table1的數(shù)據(jù)

      方法1:使用union all,但是有256條數(shù)據(jù)的限制 select id,name from table1 where id=2 union all select id,name from table1 where id=1 union all select id,name from table1 where id=4 union all select id,name from table1 where id=3

      方法2:在order by中使用case when select id ,name from t where id in(2,1,4,3)order by(case id when 2 then 'A' when 1 then 'B' when 4 then 'C' when 3 then 'D' end)

      *以上兩種方法適合在數(shù)據(jù)量非常小的情況下使用

      方法3:使用游標(biāo)和臨時表

      先建一個輔助表,里面你需要的順序插入,比如2,1,4,3 create table t1(id int)insert into t1 select 2 union all select 1 union all select 4 union all select 3 declare @id int--定義游標(biāo) declare c_test cursor for select id from t1

      select * into #tmp from table1 where 1=2--構(gòu)造臨時表的結(jié)構(gòu) OPEN c_test FETCH NEXT FROM c_test INTO @id WHILE @@FETCH_STATUS = 0 BEGIN--按t1中的id順序插數(shù)據(jù)到臨時表

      insert into #tmp select id,name from table1 where id=@id FETCH NEXT FROM c_test INTO @id End Close c_test deallocate c_test

      *該方法適合需要按照輔助表的順序重排table的順序時使用 方法4:分割字符串參數(shù)

      select * into #tmp from table1 where 1=2--構(gòu)造臨時表的結(jié)構(gòu) declare @str varchar(300),@id varchar(300),@m int,@n int set @str='2,1,4,3,'---注意后面有個逗號 set @m=CHARINDEX(',',@str)set @n=1 WHILE @m>0 BEGIN set @id=substring(@str,@n,@m-@n)--print @id insert into #tmp select id,name from table1 where id=convert(int,@id)set @n=@m+1 set @m=CHARINDEX(',',@str,@n)END *該方法比較有通用性

      測試結(jié)果

      id name---------------2 r 1 q 4 5 3 3

      本文較長,包含了如下幾部分

      1.2.3.4.5.使用不帶參數(shù)的存儲過程 使用帶有輸入?yún)?shù)的存儲過程

      使用帶有輸出參數(shù)的存儲過程

      使用帶有返回狀態(tài)的存儲過程

      使用帶有更新計數(shù)的存儲過程

      1使用不帶參數(shù)的存儲過程

      使用 JDBC 驅(qū)動程序調(diào)用不帶參數(shù)的存儲過程時,必須使用 call SQL 轉(zhuǎn)義序列。不帶參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示: {call procedure-name} 作為實例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲過程:

      CREATE PROCEDURE GetContactFormalNames AS BEGIN

      SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName FROM Person.Contact END

      此存儲過程返回單個結(jié)果集,其中包含一列數(shù)據(jù)(由 Person.Contact 表中前十個聯(lián)系人的稱呼、名稱和姓氏組成)。

      在下面的實例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 executeQuery 方法調(diào)用 GetContactFormalNames 存儲過程。

      public static void executeSprocNoParams(Connection con){ try { Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(“{call dbo.GetContactFormalNames}”);

      while(rs.next()){ System.out.println(rs.getString(“FormalName”));} rs.close();stmt.close();} catch(Exception e){ e.printStackTrace();} } 2使用帶有輸入?yún)?shù)的存儲過程

      使用 JDBC 驅(qū)動程序調(diào)用帶參數(shù)的存儲過程時,必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 IN 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

      {call procedure-name[([parameter][,[parameter]]...)]}

      構(gòu)造 call 轉(zhuǎn)義序列時,請使用 ?(問號)字符來指定 IN 參數(shù)。此字符充當(dāng)要傳遞給該存儲過程的參數(shù)值的占位符??梢允褂?SQLServerPreparedStatement 類的 setter 方法之一為參數(shù)指定值??墒褂玫?setter 方法由 IN 參數(shù)的數(shù)據(jù)類型決定。向 setter 方法傳遞值時,不僅需要指定要在參數(shù)中使用的實際值,還必須指定參數(shù)在存儲過程中的序數(shù)位置。例如,如果存儲過程包含單個 IN 參數(shù),則其序數(shù)值為 1。如果存儲過程包含兩個參數(shù),則第一個序數(shù)值為 1,第二個序數(shù)值為 2。作為如何調(diào)用包含 IN 參數(shù)的存儲過程的實例,使用 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入?yún)?shù)(它是一個整數(shù)值),然后基于指定的 EmployeeID 返回雇員及其經(jīng)理的遞歸列表。下面是調(diào)用此存儲過程的 Java 代碼:

      public static void executeSprocInParams(Connection con){ try { PreparedStatement pstmt = con.prepareStatement(“{call dbo.uspGetEmployeeManagers(?)}”);pstmt.setInt(1, 50);ResultSet rs = pstmt.executeQuery();while(rs.next()){ System.out.println(“EMPLOYEE:”);System.out.println(rs.getString(“LastName”)+ “, ” + rs.getString(“FirstName”));System.out.println(“MANAGER:”);System.out.println(rs.getString(“ManagerLastName”)+ “, ” + rs.getString(“ManagerFirstName”));System.out.println();} rs.close();pstmt.close();} catch(Exception e){ e.printStackTrace();} } 3使用帶有輸出參數(shù)的存儲過程

      使用 JDBC 驅(qū)動程序調(diào)用此類存儲過程時,必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 OUT 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

      {call procedure-name[([parameter][,[parameter]]...)]}

      構(gòu)造 call 轉(zhuǎn)義序列時,請使用 ?(問號)字符來指定 OUT 參數(shù)。此字符充當(dāng)要從該存儲過程返回的參數(shù)值的占位符。要為 OUT 參數(shù)指定值,必須在運行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數(shù)的數(shù)據(jù)類型。

      使用 registerOutParameter 方法為 OUT 參數(shù)指定的值必須是 java.sql.Types 所包含的 JDBC 數(shù)據(jù)類型之一,而它又被映射成本地 SQL Server 數(shù)據(jù)類型之一。有關(guān) JDBC 和 SQL Server 數(shù)據(jù)類型的詳細信息,請參閱了解 JDBC 驅(qū)動程序數(shù)據(jù)類型。

      當(dāng)您對于 OUT 參數(shù)向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用于此參數(shù)的數(shù)據(jù)類型,而且必須在存儲過程中指定此參數(shù)的序號位置或此參數(shù)的名稱。例如,如果存儲過程包含單個 OUT 參數(shù),則其序數(shù)值為 1;如果存儲過程包含兩個參數(shù),則第一個序數(shù)值為 1,第二個序數(shù)值為 2。

      作為實例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲過程: 根據(jù)指定的整數(shù) IN 參數(shù)(employeeID),該存儲過程也返回單個整數(shù) OUT 參數(shù)(managerID)。根據(jù) HumanResources.Employee 表中包含的 EmployeeID,OUT 參數(shù)中返回的值為 ManagerID。

      在下面的實例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 GetImmediateManager 存儲過程:

      public static void executeStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{call dbo.GetImmediateManager(?, ?)}”);cstmt.setInt(1, 5);cstmt.registerOutParameter(2, java.sql.Types.INTEGER);cstmt.execute();System.out.println(“MANAGER ID: ” + cstmt.getInt(2));} catch(Exception e){ e.printStackTrace();} } 本示例使用序號位置來標(biāo)識參數(shù)?;蛘?,也可以使用參數(shù)的名稱(而非其序號位置)來標(biāo)識此參數(shù)。下面的代碼示例修改了上一個示例,以說明如何在 Java 應(yīng)用程序中使用命名參數(shù)。請注意,這些參數(shù)名稱對應(yīng)于存儲過程的定義中的參數(shù)名稱:

      CREATE PROCEDURE GetImmediateManager @employeeID INT, @managerID INT OUTPUT AS BEGIN

      SELECT @managerID = ManagerID FROM HumanResources.Employee WHERE EmployeeID = @employeeID END

      存儲過程可能返回更新計數(shù)和多個結(jié)果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規(guī)范,此規(guī)范規(guī)定在檢索 OUT 參數(shù)之前應(yīng)檢索多個結(jié)果集和更新計數(shù)。也就是說,應(yīng)用程序應(yīng)先檢索所有 ResultSet 對象和更新計數(shù),然后使用 CallableStatement.getter 方法檢索 OUT 參數(shù)。否則,當(dāng)檢索 OUT 參數(shù)時,尚未檢索的 ResultSet 對象和更新計數(shù)將丟失。使用帶有返回狀態(tài)的存儲過程

      使用 JDBC 驅(qū)動程序調(diào)用這種存儲過程時,必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。返回狀態(tài)參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

      {[?=]call procedure-name[([parameter][,[parameter]]...)]}

      構(gòu)造 call 轉(zhuǎn)義序列時,請使用 ?(問號)字符來指定返回狀態(tài)參數(shù)。此字符充當(dāng)要從該存儲過程返回的參數(shù)值的占位符。要為返回狀態(tài)參數(shù)指定值,必須在執(zhí)行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數(shù)的數(shù)據(jù)類型。

      此外,向 registerOutParameter 方法傳遞返回狀態(tài)參數(shù)值時,不僅需要指定要使用的參數(shù)的數(shù)據(jù)類型,還必須指定參數(shù)在存儲過程中的序數(shù)位置。對于返回狀態(tài)參數(shù),其序數(shù)位置始終為 1,這是因為它始終是調(diào)用存儲過程時的第一個參數(shù)。盡管 SQLServerCallableStatement 類支持使用參數(shù)的名稱來指示特定參數(shù),但您只能對返回狀態(tài)參數(shù)使用參數(shù)的序號位置編號。

      作為實例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲過程:

      CREATE PROCEDURE CheckContactCity(@cityName CHAR(50))AS BEGIN

      IF((SELECT COUNT(*)FROM Person.Address WHERE City = @cityName)> 1)RETURN 1 ELSE

      RETURN 0 END

      該存儲過程返回狀態(tài)值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數(shù)指定的城市。

      在下面的實例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,然后使用 execute 方法調(diào)用 CheckContactCity 存儲過程:

      public static void executeStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{? = call dbo.CheckContactCity(?)}”);cstmt.registerOutParameter(1, java.sql.Types.INTEGER);cstmt.setString(2, “Atlanta”);cstmt.execute();System.out.println(“RETURN STATUS: ” + cstmt.getInt(1));} cstmt.close();catch(Exception e){ e.printStackTrace();} } 5 使用帶有更新計數(shù)的存儲過程 使用 SQLServerCallableStatement 類構(gòu)建對存儲過程的調(diào)用之后,可以使用 execute 或 executeUpdate 方法中的任意一個來調(diào)用此存儲過程。executeUpdate 方法將返回一個 int 值,該值包含受此存儲過程影響的行數(shù),但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數(shù)計數(shù),則可以在運行存儲過程后調(diào)用 getUpdateCount 方法。

      作為實例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下表和存儲過程:

      CREATE TABLE TestTable(Col1 int IDENTITY, Col2 varchar(50), Col3 int);

      CREATE PROCEDURE UpdateTestTable @Col2 varchar(50), @Col3 int AS BEGIN

      UPDATE TestTable SET Col2 = @Col2, Col3 = @Col3 END;在下面的實例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫的打開連接,并使用 execute 方法調(diào)用 UpdateTestTable 存儲過程,然后使用 getUpdateCount 方法返回受存儲過程影響的行計數(shù)。

      public static void executeUpdateStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{call dbo.UpdateTestTable(?, ?)}”);cstmt.setString(1, “A”);cstmt.setInt(2, 100);cstmt.execute();int count = cstmt.getUpdateCount();cstmt.close();

      System.out.println(“ROWS AFFECTED: ” + count);} catch(Exception e){ e.printStackTrace();} }

      1.sql存儲過程概述

      在大型數(shù)據(jù)庫系統(tǒng)中,存儲過程和觸發(fā)器具有很重要的作用。無論是存儲過程還是觸發(fā)器,都是SQL 語句和流程控制語句的集合。就本質(zhì)而言,觸發(fā)器也是一種存儲過程。存儲過程在運算時生成執(zhí)行方式,所以,以后對其再運行時其執(zhí)行速度很快。SQL Server 2000 不僅提供了用戶自定義存儲過程的功能,而且也提供了許多可作為工具使用的系統(tǒng)存儲過程。

      存儲過程的概念

      存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫。中用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。

      在SQL Server 的系列版本中存儲過程分為兩類:系統(tǒng)提供的存儲過程和用戶自定義存儲過程。系統(tǒng)過程主要存儲在master 數(shù)據(jù)庫中并以sp_為前綴,并且系統(tǒng)存儲過程主要是從系統(tǒng)表中獲取信息,從而為系統(tǒng)管理員管理SQL Server 提供支持。通過系統(tǒng)存儲過程,MS SQL Server 中的許多管理性或信息性的活動(如了解數(shù)據(jù)庫對象、數(shù)據(jù)庫信息)都可以被順利有效地完成。盡管這些系統(tǒng)存儲過程被放在master 數(shù)據(jù)庫中,但是仍可以在其它數(shù)據(jù)庫中對其進行調(diào)用,在調(diào)用時不必在存儲過程名前加上數(shù)據(jù)庫名。而且當(dāng)創(chuàng)建一個新數(shù)據(jù)庫時,一些系統(tǒng)存儲過程會在新數(shù)據(jù)庫中被自動創(chuàng)建。用戶自定義存儲過程是由用戶創(chuàng)建并能完成某一特定功能(如查詢用戶所需數(shù)據(jù)信息)的存儲過程。在本章中所涉及到的存儲過程主要是指用戶自定義存儲過程。

      存儲過程的優(yōu)點

      當(dāng)利用MS SQL Server 創(chuàng)建一個應(yīng)用程序時,Transaction-SQL 是一種主要的編程語言。若運用Transaction-SQL 來進行編程,有兩種方法。其一是,在本地存儲Transaction-SQL 程序,并創(chuàng)建應(yīng)用程序向SQL Server 發(fā)送命令來對結(jié)果進行處理。其二是,可以把部分用Transaction-SQL 編寫的程序作為存儲過程存儲在SQL Server 中,并創(chuàng)建應(yīng)用程序來調(diào)用存儲過程,對數(shù)據(jù)結(jié)果進行處理存儲過程能夠通過接收參數(shù)向調(diào)用者返回結(jié)果集,結(jié)果集的格式由調(diào)用者確定;返回狀態(tài)值給調(diào)用者,指明調(diào)用是成功或是失敗;包括針對數(shù)據(jù)庫的操作語句,并且可以在一個存儲過程中調(diào)用另一存儲過程。

      我們通常更偏愛于使用第二種方法,即在SQL Server 中使用存儲過程而不是在客戶計算機上調(diào)用Transaction-SQL 編寫的一段程序,原因在于存儲過程具有以下優(yōu)點:

      (1)存儲過程允許標(biāo)準(zhǔn)組件式編程

      存儲過程在被創(chuàng)建以后可以在程序中被多次調(diào)用,而不必重新編寫該存儲過程的SQL 語句。而且數(shù)據(jù)庫專業(yè)人員可隨時對存儲過程進行修改,但對應(yīng)用程序源代碼毫無影響(因為應(yīng)用程序源代碼只包含存儲過程的調(diào)用語句),從而極大地提高了程序的可移植性。

      (2)存儲過程能夠?qū)崿F(xiàn)較快的執(zhí)行速度

      如果某一操作包含大量的Transaction-SQL 代碼或分別被多次執(zhí)行,那么存儲過程要比批處理的執(zhí)行速度快很多。因為存儲過程是預(yù)編譯的,在首次運行一個存儲過程時,查詢優(yōu)化器對其進行分析、優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計劃。而批處理的Transaction-SQL 語句在每次運行時都要進行編譯和優(yōu)化,因此速度相對要慢一些。

      (3)存儲過程能夠減少網(wǎng)絡(luò)流量

      對于同一個針對數(shù)據(jù)數(shù)據(jù)庫對象的操作(如查詢、修改),如果這一操作所涉及到的 Transaction-SQL 語句被組織成一存儲過程,那么當(dāng)在客戶計算機上調(diào)用該存儲過程時,網(wǎng)絡(luò)中傳送的只是該調(diào)用語句,否則將是多條SQL 語句,從而大大增加了網(wǎng)絡(luò)流量,降低網(wǎng)絡(luò)負(fù)載。

      (4)存儲過程可被作為一種安全機制來充分利用

      系統(tǒng)管理員通過對執(zhí)行某一存儲過程的權(quán)限進行限制,從而能夠?qū)崿F(xiàn)對相應(yīng)的數(shù)據(jù)訪問權(quán)限的限制,避免非授權(quán)用戶對數(shù)據(jù)的訪問,保證數(shù)據(jù)的安全。(我們將在14 章“SQLServer 的用戶和安全性管理”中對存儲過程的這一應(yīng)用作更為清晰的介紹)

      注意:存儲過程雖然既有參數(shù)又有返回值,但是它與函數(shù)不同。存儲過程的返回值只是指明執(zhí)行是否成功,并且它不能像函數(shù)那樣被直接調(diào)用,也就是在調(diào)用存儲過程時,在存儲過程名字前一定要有EXEC保留字。

      2.SQL存儲過程創(chuàng)建

      創(chuàng)建存儲過程,存儲過程是保存起來的可以接受和返回用戶提供的參數(shù)的 Transact-SQL 語句的集合。

      可以創(chuàng)建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。

      也可以創(chuàng)建在 Microsoft? SQL Server? 啟動時自動運行的存儲過程。

      語法

      CREATE PROC [ EDURE ] procedure_name [;number ]

      [ { @parameter data_type }

      [ VARYING ] [ = default ] [ OUTPUT ]

      ] [ ,...n ]

      [ WITH

      { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

      [ FOR REPLICATION ]

      AS sql_statement [...n ]

      參數(shù)

      procedure_name

      新存儲過程的名稱。過程名必須符合標(biāo)識符規(guī)則,且對于數(shù)據(jù)庫及其所有者必須唯一。

      要創(chuàng)建局部臨時過程,可以在 procedure_name 前面加一個編號符(#procedure_name),要創(chuàng)建全局臨時過程,可以在 procedure_name 前面加兩個編號符

      (##procedure_name)。完整的名稱(包括 # 或 ##)不能超過 128 個字符。指定過程所有者的名稱是可選的。

      ;number

      是可選的整數(shù),用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應(yīng)用程序使用的過程可以命名為

      orderproc;

      1、orderproc;2 等。DROP PROCEDURE orderproc 語句將除去整個組。如果名稱中包含定界標(biāo)識符,則數(shù)字不應(yīng)包含在標(biāo)識符中,只應(yīng)在 procedure_name 前后使用適當(dāng)?shù)亩ń绶?/p>

      @parameter

      過程中的參數(shù)。在 CREATE PROCEDURE 語句中可以聲明一個或多個參數(shù)。用戶必須在執(zhí)行過程時提供每個所聲明參數(shù)的值(除非定義了該參數(shù)的默認(rèn)值)。存儲過程最多可以有 2.100 個參數(shù)。

      使用 @ 符號作為第一個字符來指定參數(shù)名稱。參數(shù)名稱必須符合標(biāo)識符的規(guī)則。每個過程的參數(shù)僅用于該過程本身;相同的參數(shù)名稱可以用在其它過程中。默認(rèn)情況下,參數(shù)只能代替常量,而不能用于代替表名、列名或其它數(shù)據(jù)庫對象的名稱。

      data_type

      參數(shù)的數(shù)據(jù)類型。所有數(shù)據(jù)類型(包括 text、ntext 和 image)均可以用作存儲過程的參數(shù)。不過,cursor 數(shù)據(jù)類型只能用于 OUTPUT 參數(shù)。如果指定的數(shù)據(jù)類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關(guān)鍵字。

      說明 對于可以是 cursor 數(shù)據(jù)類型的輸出參數(shù),沒有最大數(shù)目的限制。

      VARYING

      指定作為輸出參數(shù)支持的結(jié)果集(由存儲過程動態(tài)構(gòu)造,內(nèi)容可以變化)。僅適用于游標(biāo)參數(shù)。

      default

      參數(shù)的默認(rèn)值。如果定義了默認(rèn)值,不必指定該參數(shù)的值即可執(zhí)行過程。默認(rèn)值必須是常量或 NULL。如果過程將對該參數(shù)使用 LIKE 關(guān)鍵字,那么默認(rèn)值中可以包含通配符(%、_、[] 和 [^])。

      OUTPUT

      表明參數(shù)是返回參數(shù)。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數(shù)可將信息返回給調(diào)用過程。Text、ntext 和 image 參數(shù)可用作 OUTPUT 參數(shù)。使用 OUTPUT 關(guān)鍵字的輸出參數(shù)可以是游標(biāo)占位符。

      n

      表示最多可以指定 2.100 個參數(shù)的占位符。

      {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

      RECOMPILE 表明 SQL Server 不會緩存該過程的計劃,該過程將在運行時重新編譯。在使用非典型值或臨時值而不希望覆蓋緩存在內(nèi)存中的執(zhí)行計劃時,請使用 RECOMPILE 選項。

      ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 復(fù)制的一部分發(fā)布。

      說明 在升級過程中,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創(chuàng)建加密過程。

      FOR REPLICATION

      指定不能在訂閱服務(wù)器上執(zhí)行為復(fù)制創(chuàng)建的存儲過程。.使用 FOR REPLICATION 選項創(chuàng)建的存儲過程可用作存儲過程篩選,且只能在復(fù)制過程中執(zhí)行。本選項不能和 WITH RECOMPILE 選項一起使用。

      AS

      指定過程要執(zhí)行的操作。

      sql_statement

      過程中要包含的任意數(shù)目和類型的 Transact-SQL 語句。但有一些限制。

      n

      是表示此過程可以包含多條 Transact-SQL 語句的占位符。

      注釋

      存儲過程的最大大小為 128 MB。

      用戶定義的存儲過程只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建(臨時過程除外,臨時過程總是在 tempdb 中創(chuàng)建)。在單個批處理中,CREATE PROCEDURE 語句不能與其它 Transact-SQL 語句組合使用。

      默認(rèn)情況下,參數(shù)可為空。如果傳遞 NULL 參數(shù)值并且該參數(shù)在 CREATE 或 ALTER TABLE 語句中使用,而該語句中引用的列又不允許使用 NULL,則 SQL Server 會產(chǎn)生一條錯誤信息。為了防止向不允許使用 NULL 的列傳遞 NULL 參數(shù)值,應(yīng)向過程中添加編程邏輯或為該列使用默認(rèn)值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 關(guān)鍵字)。

      建議在存儲過程的任何 CREATE TABLE 或 ALTER TABLE 語句中都為每列顯式指定 NULL 或 NOT NULL,例如在創(chuàng)建臨時表時。ANSI_DFLT_ON 和 ANSI_DFLT_OFF 選項控制 SQL Server 為列指派 NULL 或 NOT NULL 特性的方式(如果在 CREATE TABLE 或 ALTER TABLE 語句中沒有指定的話)。如果某個連接執(zhí)行的存儲過程對這些選項的設(shè)置與創(chuàng)建該過程的連接的設(shè)置不同,則為第二個連接創(chuàng)建的表列可能會有不同的為空性,并且表現(xiàn)出不同的行為方式。如果為每個列顯式聲明了 NULL 或 NOT NULL,那么將對所有執(zhí)行該存儲過程的連接使用相同的為空性創(chuàng)建臨時表。

      在創(chuàng)建或更改存儲過程時,SQL Server 將保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的設(shè)置。執(zhí)行存儲過程時,將使用這些原始設(shè)置。因此,所有客戶端會話的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設(shè)置在執(zhí)行存儲過程時都將被忽略。在存儲過程中出現(xiàn)的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 語句不影響存儲過程的功能。

      其它 SET 選項(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在創(chuàng)建或更改存儲過程時不保存。如果存儲過程的邏輯取決于特定的設(shè)置,應(yīng)在過程開頭添加一條 SET 語句,以確保設(shè)置正確。從存儲過程中執(zhí)行 SET 語句時,該設(shè)置只在存儲過程完成之前有效。之后,設(shè)置將恢復(fù)為調(diào)用存儲過程時的值。這使個別的客戶端可以設(shè)置所需的選項,而不會影響存儲過程的邏輯。

      第四篇:SQL語言匯總

      1.UPDATE MARK

      SET 總分=語文+數(shù)學(xué)+英語

      SELECT 準(zhǔn)考證號,姓名,總分

      FROM MARK

      WHERE 語文>=75 AND數(shù)學(xué)>=75 AND 英語>=75 AND 語文+數(shù)學(xué)+英語>=240

      ORDER BY 總分 DESC

      UPDATE MARK

      SET 修正分?jǐn)?shù)=高考分?jǐn)?shù)*1.3

      WHERE 籍貫='云南' OR 籍貫='福建'

      SELECT AVG(高考分?jǐn)?shù))as平均分

      FROM MARK

      GROUP BY 性別

      SELECT *

      FROM cj

      WHERE 期中成績>=80 OR 期末成績>=80 ORDER BY 課程號 ASC

      UPDATE cj

      SET平均成績=期中成績*0.2+期末成績*0.8

      SELECT 書號,書名,作者

      FROM gm

      WHERE 書號 LIKE '理*' AND 單價>20 ORDER BY 單價 ASC

      UPDATE gm

      SET 金額=單價*數(shù)量

      UPDATE Sale

      SET 銷售金額=銷售數(shù)量*單價

      UPDATE Wage

      SET 實發(fā)工資=工資+獎金

      SELECT 姓名,實發(fā)工資

      FROM Wage

      WHERE 姓名 LIKE '*輝'OR 姓名 LIKE ' *輝*' ORDER BY 年齡 DESC

      SELECT 部門號, COUNT(*)as人數(shù)

      FROM zhigong

      GROUP BY 部門號

      UPDATE kaoshi

      SET平均成績=筆試成績*0.6+上機成績*0.4

      SELECT 考號,姓名,平均成績

      FROM kaoshi

      WHERE 姓名 LIKE '黃*'

      DELETE *

      FROM mark

      WHERE 學(xué)號='1003'

      SELECT 學(xué)號,課程號,期末成績

      FROM mark

      WHERE 學(xué)號 LIKE '*1'

      ORDER BY 期末成績 DESC

      UPDATE fk

      SET 超期罰款=單價*超期天數(shù)*0.005

      SELECT *

      FROM fk

      WHERE 單價>=50 OR 超期天數(shù)>30 ORDER BY 超期罰款 DESC

      UPDATE gp

      SET 浮動盈虧=(市場現(xiàn)價-買入加個)*買入數(shù)量

      SELECT 股票代碼,買入時間,浮動盈虧 FROM gp

      WHERE 股票代碼 LIKE '6*' AND 浮動盈虧>0 ORDER BY 買入時間 ASC

      UPDATE ah

      SET 年齡=年齡+1

      SELECT 寢室,COUNT(*)as 愛好球類人數(shù) FROM ah

      WHERE 愛好 LIKE '*球'

      GROUP BY 寢室

      UPDATE JHKC

      SET 總價=單價*庫存量

      SELECT 設(shè)備編號,設(shè)備名稱,單價

      FROM JHKC

      WHERE 庫存量<300 AND 單價<500 ORDER BY 單價 DESC

      UPDATE HCSK

      SET 票價=600

      WHERE 航班號=F807

      SELECT 航班號,起飛日期,票價

      FROM HCSK

      WHERE 出發(fā)地='福州' AND 目的地='巴黎' ORDER BY 票價 ASC

      第五篇:sql常用語句

      //創(chuàng)建臨時表空間

      create temporary tablespace test_temp

      tempfile 'E:oracleproduct10.2.0oradatatestservertest_temp01.dbf'size 32m

      autoextend on

      next 32m maxsize 2048m

      extent management local;

      //創(chuàng)建數(shù)據(jù)表空間

      create tablespace test_data

      logging

      datafile 'E:oracleproduct10.2.0oradatatestservertest_data01.dbf'size 32m

      autoextend on

      next 32m maxsize 2048m

      extent management local;

      //創(chuàng)建用戶并指定表空間

      create user username identified by password

      default tablespace test_data

      temporary tablespace test_temp;

      //給用戶授予權(quán)限

      //一般用戶

      grant connect,resource to username;

      //系統(tǒng)權(quán)限

      grant connect,dba,resource to username

      //創(chuàng)建用戶

      create user user01 identified by u01

      //建表

      create table test7272(id number(10),name varchar2(20),age number(4),joindate date default sysdate,primary key(id));

      //存儲過程

      //數(shù)據(jù)庫連接池

      數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接

      //

      //創(chuàng)建表空間

      create tablespace thirdspace

      datafile 'C:/Program Files/Oracle/thirdspace.dbf' size 10mautoextend on;

      //創(chuàng)建用戶

      create user binbin

      identified by binbin

      default tablespace firstspace

      temporary tablespace temp;

      //賦予權(quán)限

      GRANT CONNECT, SYSDBA, RESOURCE to binbin

      //null與""的區(qū)別

      簡單點說null表示還沒new出對象,就是還沒開辟空間

      個對象裝的是空字符串。

      //建視圖

      create view viewname

      as

      sql

      //建索引

      create index indexname on tablename(columnname)

      //在表中增加一列

      alter table tablename add columnname columntype

      //刪除一列

      alter table tablename drop columnname

      //刪除表格內(nèi)容,表格結(jié)構(gòu)不變

      truncate table tableneme

      //新增數(shù)據(jù)

      insert into tablename()values()

      //直接新增多條數(shù)據(jù)

      insert into tablename()

      selecte a,b,c

      from tableabc

      //更新數(shù)據(jù) new除了對象,但是這“”表示

      update tablename set columnname=? where

      //刪除數(shù)據(jù)

      delete from tablename

      where

      //union語句

      sql

      union

      sql

      //case

      case

      when then

      else

      end

      下載面試SQLword格式文檔
      下載面試SQL.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        SQL語言

        1.輸出任意兩個字符串變量的值(參考代碼) declare @v1 varchar(12),@V2 varchar(12) set @v1='中國' set @v2='你好!' select @v1+@v2 2.為以下程序糾錯 declare @v1 varchar(12)......

        SQL語言以及SQL

        SQL語言以及SQL*PLUS工具 1. SQL語言組成: ? 數(shù)據(jù)查詢語言(DQL):SELECT; ? 數(shù)據(jù)操縱語言(DML):INSERT、UPDATE、DELETE; ? 事務(wù)控制語言(TCS):COMMIT、ROLLBACK; ? 數(shù)據(jù)定義語言(DDL):CREATE、DR......

        SQL總結(jié)(精選合集)

        1.SQL語句的With cte as用法: with as短語,也叫做子查詢部分。即定義一個SQL片斷,該片斷會讓整個SQL語句所用到。 eg: with cr as (select CountryRegionCode from person.Count......

        SQL 語言

        SQL語言 create database student on primary (name=student_data1,filename='c:student_data1.mdf',size=10M,maxsize=100M,filegrowth=10%) filegroupstudent_group分組......

        SQL語句大全

        SQL練習(xí)一、 設(shè)有如下的關(guān)系模式, 試用SQL語句完成以下操作: 學(xué)生(學(xué)號,姓名,性別,年齡,所在系) 課程(課程號,課程名,學(xué)分,學(xué)期,學(xué)時) 選課(學(xué)號,課程號,成績) 1. 求選修了課程號為“C2”......

        SQL語句

        SQL語句,用友的SQL2000,通過查詢管理器寫的語句 1、查詢 2、修改 3、刪除 4、插入表名:users 包含字段:id,sname,sage 查詢 select * from users查詢users表中所有數(shù)據(jù) select i......

        常用SQL語句

        一、創(chuàng)建數(shù)據(jù)庫 create database 數(shù)據(jù)庫名 on( name='數(shù)據(jù)庫名_data', size='數(shù)據(jù)庫文件大小', maxsize='數(shù)據(jù)庫文件最大值', filegrowth=5%,//數(shù)據(jù)庫文件的增長率 filename......

        sql語句

        簡單基本的sql語句 幾個簡單的基本的sql語句 選擇:select * from table1 where范圍 插入:insert into table1(field1,field2) values(value1,value2) 刪除:delete from table1......