<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 39,  comments - 44,  trackbacks - 0
      2008年10月31日
    “補充說明”通常是在求職簡歷的結束部分,可以填寫,也可以空著。不過,如果能夠善于利用它,求職成功率將會大大提高。畢竟,作為求職簡歷的最后部分,它是表現自我的最后機會。

      在“補充說明”中填寫的最佳信息因人而異,這取決于求職者的職業目標和背景。請記住,求職簡歷是自我營銷的手段,其中的信息應當有助于向用人單位推銷自己,以實現自己的職業目標。可以這樣考慮問題:如果這是向潛在的用人單位推銷自己的最會機會,你會說些什么?

      以下是一些填寫“補充說明”的思路,供大家參考:

      能力或業績總結

      在補充說明對自己的能力和職業生涯進行總結。在能力或業績總結中要突出自己主要的“賣點”和成功案例——這一切都應當與你想要應聘的職位有關系。

      獲獎情況

      用列舉自己的獲獎情況作為求職簡歷的結束,會給用人單位留下深刻印象。

      證明書或推薦信

      你是否收到過對于你的工作情況表示滿意的推薦信或業績評估證明?如果有,可以摘選其中的精采部分作為“補充說明”。

      發表作品

      如果在報刊、雜志上發表過作品,可以考慮在“補充說明”里羅列出來。

      專利

      如果擁有專利(包括正在申請的),請在“補充說明”中列出。

      演講能力

      許多職位要有演講能力才能勝任。列舉自己參加過的演講、主題發言會給用人單位留下好印象。

      計算機運用技能

      在“補充說明”中列舉自己在計算機操作系統、網絡和硬件等方面的技能,多多益善。

      培訓情況

      在“補充說明”中列出自己參加過的專業培訓和繼續教育。

      再次強調工作地點

      在“補充說明”中再次強調工作地點不失為結束求職簡歷的好辦法。

      說明自己愿意出差

      如果愿意出差,可以在補充說明中加以說明,用人單位或許會因為這一點而看上你。

      應該省略的內容

      補充說明不要涉及婚姻狀況、年齡、有多少個孩子等情況,如果興趣愛好與工作無關,最好也不要提及。

     來源:中華英才網 
    posted @ 2008-11-21 20:01 礦礦 閱讀(277) | 評論 (1)編輯 收藏

    下表是元字符及其在正則表達式上下文中的行為的一個完整列表:

    字符 描述
    將下一個字符標記為一個特殊字符、或一個原義字符、或一個后向引用、或一個八進制轉義符。例如,'n' 匹配字符 "n"。'\n' 匹配一個換行符。序列 '\' 匹配 "" 而 "\(" 則匹配 "("。
    ^
    匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。
    $
    匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
    *
    匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價于{0,}。[/size]
    +
    匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。
    ?
    匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價于 {0,1}。
    {n}
    是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
    {n,}
    是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
    {n,m}
    和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格。
    ?
    當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
    .
    匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
    (pattern)
    匹配pattern 并獲取這一匹配。所獲取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 {CONTENT}… 屬性。要匹配圓括號字符,請使用 '\(' 或 '\)'。
    (?:pattern)
    匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 "或" 字符 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表達式。
    (?=pattern)
    正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
    (?!pattern)
    負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
    x|y
    匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
    [xyz]
    字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
    [^xyz]
    負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
    [a-z]
    字符范圍。匹配指定范圍內的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符。
    [^a-z]
    負值字符范圍。匹配任何不在指定范圍內的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
    \b
    匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
    \B
    匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
    \cx
    匹配由x指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字符。
    \d
    匹配一個數字字符。等價于 [0-9]。
    \D
    匹配一個非數字字符。等價于 [^0-9]。
    \f
    匹配一個換頁符。等價于 \x0c 和 \cL。
    \n
    匹配一個換行符。等價于 \x0a 和 \cJ。
    \r
    匹配一個回車符。等價于 \x0d 和 \cM。
    \s
    匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
    \S
    匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
    \t
    匹配一個制表符。等價于 \x09 和 \cI。
    \v
    匹配一個垂直制表符。等價于 \x0b 和 \cK。
    \w
    匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'。
    \W
    匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]'。
    \xn
    匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如, '\x41' 匹配 "A"。'\x041' 則等價于 '\x04' & "1"。正則表達式中可以使用 ASCII 編碼。.
    \num
    匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。例如,'(.)' 匹配兩個連續的相同字符。
    \n
    標識一個八進制轉義值或一個后向引用。如果 \n 之前至少 n 個獲取的子表達式,則 n 為后向引用。否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值。
    \nm
    標識一個八進制轉義值或一個后向引用。如果 \nm 之前至少有is preceded by at least nm 個獲取得子表達式,則 nm 為后向引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的后向引用。如果前面的條件都不滿足,若 n 和 m 均為八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。
    \nml
    如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-7),則匹配八進制轉義值 nml。
    \un
    匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符。例如,\u00A9 匹配版權符號 (?)。

    posted @ 2008-11-21 19:35 礦礦 閱讀(2247) | 評論 (0)編輯 收藏

    匹配中文字符的正則表達式: [u4e00-u9fa5]
    評注:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

    匹配雙字節字符(包括漢字在內):[^x00-xff]
    評注:可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

    匹配空白行的正則表達式:ns*r
    評注:可以用來刪除空白行

    匹配HTML標記的正則表達式:<(S*?)[^>]*>.*?|<.*? />
    評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對于復雜的嵌套標記依舊無能為力

    匹配首尾空白字符的正則表達式:^s*|s*$
    評注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式

    匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
    評注:表單驗證時很實用

    匹配網址URL的正則表達式:[a-zA-z]+://[^s]*
    評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求

    匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    評注:表單驗證時很實用

    匹配國內電話號碼:d{3}-d{8}|d{4}-d{7}
    評注:匹配形式如 0511-4405222 或 021-87888822

    匹配騰訊QQ號:[1-9][0-9]{4,}
    評注:騰訊QQ號從10000開始

    匹配中國郵政編碼:[1-9]d{5}(?!d)
    評注:中國郵政編碼為6位數字

    匹配身份證:d{15}|d{18}
    評注:中國的身份證為15位或18位

    匹配ip地址:d+.d+.d+.d+
    評注:提取ip地址時有用


    匹配特定數字:
    ^[1-9]d*$    //匹配正整數
    ^-[1-9]d*$   //匹配負整數
    ^-?[1-9]d*$   //匹配整數
    ^[1-9]d*|0$  //匹配非負整數(正整數 + 0)
    ^-[1-9]d*|0$   //匹配非正整數(負整數 + 0)
    ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點數
    ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負浮點數
    ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點數
    ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負浮點數(正浮點數 + 0)
    ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點數(負浮點數 + 0)
    評注:處理大量數據時有用,具體應用時注意修正

    匹配特定字符串:
    ^[A-Za-z]+$  //匹配由26個英文字母組成的字符串
    ^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串
    ^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串
    ^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串
    ^w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串


    在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹如下:


    只能輸入數字:“^[0-9]*$”
    只能輸入n位的數字:“^d{n}$”
    只能輸入至少n位數字:“^d{n,}$”
    只能輸入m-n位的數字:“^d{m,n}$”
    只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)$”
    只能輸入有兩位小數的正實數:“^[0-9]+(.[0-9]{2})?$”
    只能輸入有1-3位小數的正實數:“^[0-9]+(.[0-9]{1,3})?$”
    只能輸入非零的正整數:“^+?[1-9][0-9]*$”
    只能輸入非零的負整數:“^-[1-9][0-9]*$”
    只能輸入長度為3的字符:“^.{3}$”
    只能輸入由26個英文字母組成的字符串:“^[A-Za-z]+$”
    只能輸入由26個大寫英文字母組成的字符串:“^[A-Z]+$”
    只能輸入由26個小寫英文字母組成的字符串:“^[a-z]+$”
    只能輸入由數字和26個英文字母組成的字符串:“^[A-Za-z0-9]+$”
    只能輸入由數字、26個英文字母或者下劃線組成的字符串:“^w+$”
    驗證用戶密碼:“^[a-zA-Z]w{5,17}$”正確格式為:以字母開頭,長度在6-18之間,


    只能包含字符、數字和下劃線。
    驗證是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
    只能輸入漢字:“^[u4e00-u9fa5],{0,}$”
    驗證Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
    驗證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
    驗證電話號碼:“^((d{3,4})|d{3,4}-)?d{7,8}$”


    正確格式為:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,


    “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
    驗證身份證號(15位或18位數字):“^d{15}|d{}18$”
    驗證一年的12個月:“^(0?[1-9]|1[0-2])$”正確格式為:“01”-“09”和“1”“12”
    驗證一個月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”


    正確格式為:“01”“09”和“1”“31”。


    匹配中文字符的正則表達式: [u4e00-u9fa5]
    匹配雙字節字符(包括漢字在內):[^x00-xff]
    匹配空行的正則表達式:n[s| ]*r
    匹配HTML標記的正則表達式:/<(.*)>.*</1>|<(.*) />/
    匹配首尾空格的正則表達式:(^s*)|(s*$)
    匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
    匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

    (1)應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)
    String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

    (2)應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現
    String.prototype.trim = function()
    {
    return this.replace(/(^s*)|(s*$)/g, "");
    }
    (3)應用:利用正則表達式分解和轉換IP地址
    function IP2V(ip) //IP地址轉換成對應數值
    {
    re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正則表達式
    if(re.test(ip))
    {
    return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
    }
    else
    {
    throw new Error("Not a valid IP address!")
    }
    }
    (4)應用:從URL地址中提取文件名的javascript程序
    s="http://www.9499.net/page1.htm";
    s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm
    (5)應用:利用正則表達式限制網頁表單里的文本框輸入內容
    用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
    用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
    用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
    用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''

    posted @ 2008-11-21 10:58 礦礦 閱讀(2004) | 評論 (2)編輯 收藏
    [轉]自天極網

    1使用不帶參數的存儲過程

      使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列。不帶參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name}

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

      

    以下是引用片段:
    CREATE PROCEDURE GetContactFormalNames
      AS
      BEGIN
       SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
       FROM Person.Contact
      END
    此存儲過程返回單個結果集,其中包含一列數據(由 Person.Contact 表中前十個聯系人的稱呼、名稱和姓氏組成)。

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 executeQuery 方法調用 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使用帶有輸入參數的存儲過程

      使用 JDBC 驅動程序調用帶參數的存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 IN 參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name[([parameter][,[parameter]]...)]}

      構造 call 轉義序列時,請使用 ?(問號)字符來指定 IN 參數。此字符充當要傳遞給該存儲過程的參數值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的數據類型決定。

      向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在存儲過程中的序數位置。例如,如果存儲過程包含單個 IN 參數,則其序數值為 1。如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。

      作為如何調用包含 IN 參數的存儲過程的實例,使用 SQL Server 2005 AdventureWorks 示例數據庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入參數(它是一個整數值),然后基于指定的 EmployeeID 返回雇員及其經理的遞歸列表。下面是調用此存儲過程的 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使用帶有輸出參數的存儲過程

      使用 JDBC 驅動程序調用此類存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name[([parameter][,[parameter]]...)]}

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

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

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

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

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 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();
       }
      } 

    本示例使用序號位置來標識參數。或者,也可以使用參數的名稱(而非其序號位置)來標識此參數。下面的代碼示例修改了上一個示例,以說明如何在 Java 應用程序中使用命名參數。請注意,這些參數名稱對應于存儲過程的定義中的參數名稱: CREATE PROCEDURE GetImmediateManager

     
    以下是引用片段:
     @employeeID INT,
       @managerID INT OUTPUT
      AS
      BEGIN
       SELECT @managerID = ManagerID
       FROM HumanResources.Employee
       WHERE EmployeeID = @employeeID
      END
      存儲過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規范,此規范規定在檢索 OUT 參數之前應檢索多個結果集和更新計數。也就是說,應用程序應先檢索所有 ResultSet 對象和更新計數,然后使用 CallableStatement.getter 方法檢索 OUT 參數。否則,當檢索 OUT 參數時,尚未檢索的 ResultSet 對象和更新計數將丟失。

      4 使用帶有返回狀態的存儲過程

      使用 JDBC 驅動程序調用這種存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。返回狀態參數的 call 轉義序列的語法如下所示:

     

    以下是引用片段:
     {[?=]call procedure-name[([parameter][,[parameter]]...)]}
      構造 call 轉義序列時,請使用 ?(問號)字符來指定返回狀態參數。此字符充當要從該存儲過程返回的參數值的占位符。要為返回狀態參數指定值,必須在執行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數的數據類型。

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

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

      

    以下是引用片段:
    CREATE PROCEDURE CheckContactCity
       (@cityName CHAR(50))
      AS
      BEGIN
       IF ((SELECT COUNT(*)
       FROM Person.Address
       WHERE City = @cityName) > 1)
       RETURN 1
      ELSE
       RETURN 0
      END
      該存儲過程返回狀態值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數指定的城市。

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 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 使用帶有更新計數的存儲過程

      使用 SQLServerCallableStatement 類構建對存儲過程的調用之后,可以使用 execute 或 executeUpdate 方法中的任意一個來調用此存儲過程。executeUpdate 方法將返回一個 int 值,該值包含受此存儲過程影響的行數,但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數計數,則可以在運行存儲過程后調用 getUpdateCount 方法。

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下表和存儲過程:

      

    以下是引用片段:
    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;
    在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,并使用 execute 方法調用 UpdateTestTable 存儲過程,然后使用 getUpdateCount 方法返回受存儲過程影響的行計數。
    以下是引用片段:
    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();
       }
      }
    posted @ 2008-11-07 22:21 礦礦 閱讀(258) | 評論 (0)編輯 收藏
    [轉]自天極網

    1使用不帶參數的存儲過程

      使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列。不帶參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name}

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

      

    以下是引用片段:
    CREATE PROCEDURE GetContactFormalNames
      AS
      BEGIN
       SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
       FROM Person.Contact
      END
    此存儲過程返回單個結果集,其中包含一列數據(由 Person.Contact 表中前十個聯系人的稱呼、名稱和姓氏組成)。

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 executeQuery 方法調用 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使用帶有輸入參數的存儲過程

      使用 JDBC 驅動程序調用帶參數的存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 IN 參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name[([parameter][,[parameter]]...)]}

      構造 call 轉義序列時,請使用 ?(問號)字符來指定 IN 參數。此字符充當要傳遞給該存儲過程的參數值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的數據類型決定。

      向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在存儲過程中的序數位置。例如,如果存儲過程包含單個 IN 參數,則其序數值為 1。如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。

      作為如何調用包含 IN 參數的存儲過程的實例,使用 SQL Server 2005 AdventureWorks 示例數據庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入參數(它是一個整數值),然后基于指定的 EmployeeID 返回雇員及其經理的遞歸列表。下面是調用此存儲過程的 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使用帶有輸出參數的存儲過程

      使用 JDBC 驅動程序調用此類存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 參數的 call 轉義序列的語法如下所示:

      

    以下是引用片段:
    {call procedure-name[([parameter][,[parameter]]...)]}

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

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

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

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

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 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();
       }
      } 

    本示例使用序號位置來標識參數。或者,也可以使用參數的名稱(而非其序號位置)來標識此參數。下面的代碼示例修改了上一個示例,以說明如何在 Java 應用程序中使用命名參數。請注意,這些參數名稱對應于存儲過程的定義中的參數名稱: CREATE PROCEDURE GetImmediateManager

     
    以下是引用片段:
     @employeeID INT,
       @managerID INT OUTPUT
      AS
      BEGIN
       SELECT @managerID = ManagerID
       FROM HumanResources.Employee
       WHERE EmployeeID = @employeeID
      END
      存儲過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規范,此規范規定在檢索 OUT 參數之前應檢索多個結果集和更新計數。也就是說,應用程序應先檢索所有 ResultSet 對象和更新計數,然后使用 CallableStatement.getter 方法檢索 OUT 參數。否則,當檢索 OUT 參數時,尚未檢索的 ResultSet 對象和更新計數將丟失。

      4 使用帶有返回狀態的存儲過程

      使用 JDBC 驅動程序調用這種存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。返回狀態參數的 call 轉義序列的語法如下所示:

     

    以下是引用片段:
     {[?=]call procedure-name[([parameter][,[parameter]]...)]}
      構造 call 轉義序列時,請使用 ?(問號)字符來指定返回狀態參數。此字符充當要從該存儲過程返回的參數值的占位符。要為返回狀態參數指定值,必須在執行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數的數據類型。

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

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

      

    以下是引用片段:
    CREATE PROCEDURE CheckContactCity
       (@cityName CHAR(50))
      AS
      BEGIN
       IF ((SELECT COUNT(*)
       FROM Person.Address
       WHERE City = @cityName) > 1)
       RETURN 1
      ELSE
       RETURN 0
      END
      該存儲過程返回狀態值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數指定的城市。

      在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 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 使用帶有更新計數的存儲過程

      使用 SQLServerCallableStatement 類構建對存儲過程的調用之后,可以使用 execute 或 executeUpdate 方法中的任意一個來調用此存儲過程。executeUpdate 方法將返回一個 int 值,該值包含受此存儲過程影響的行數,但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數計數,則可以在運行存儲過程后調用 getUpdateCount 方法。

      作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下表和存儲過程:

      

    以下是引用片段:
    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;
    在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,并使用 execute 方法調用 UpdateTestTable 存儲過程,然后使用 getUpdateCount 方法返回受存儲過程影響的行計數。
    以下是引用片段:
    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();
       }
      }
    posted @ 2008-11-07 22:16 礦礦 閱讀(200) | 評論 (0)編輯 收藏

    --創建數據庫
    use master
    go
    if exists(select * from sysdatabases where name = 'BankDB')
    drop database BankDB
    go
    exec xp_cmdshell 'md E:\朱礦龍',NO_OUTPUT
    create database BankDB
    go
    use BankDB
    --創建帳戶信息表AccountInfo
    if exists(select * from sysobjects where name = 'AccountInfo')
    drop table AccountInfo
    go
    create table AccountInfo
    (
    CustID int identity(1,1) primary key,
    CustName varchar(20) not null,
    IDCard varchar(18) check(len(IDCard) = 15 or len(IDCard) = 18),
    TelePhone varchar(13) check(len(TelePhone)=11 or len(TelePhone) like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or len(TelePhone) like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,
    Address varchar(50) default '地址不詳'
    )
    go
    --創建信用卡信息表CardInfo
    if exists(select * from sysobjects where name = 'CardInfo')
    drop table CardInfo
    go
    create table CardInfo
    (
    CardID varchar(19) check(len(CardID)=19) primary key,
    CardPassWord varchar(6) default'888888',
    CustID int references AccountInfo(CustID),
    SaveType varchar(10) not null check(SaveType in('活期','定期')),
    OpenDate datetime not null default(getdate()),
    OpenMoney money not null check(OpenMoney >= 1),
    LeftMoney money not null check(LeftMoney >= 1),
    IsLoss varchar(2) not null check(IsLoss in('是','否')) default '否'
    )
    go
    --創建交易信息表TransInfo
    if exists(select * from sysobjects where name = 'TransInfo')
    drop table TransInfo
    go
    create table TransInfo
    (
    CardID varchar(19) not null,
    TransType varchar(4) not null check(TransType in('存入','支取')),
    TransMoney money not null check(TransMoney > 0),
    TransDate datetime default(getdate())
    )
    go


    -------------------------------插入測試數據-------------------------------------
    ---為AccountInfo表插入測試數據
    insert into AccountInfo values('孫悟空','422322123902140019','027-8888988','花果山')
    insert into AccountInfo values('唐僧','422322001902140019','027-8536896','大唐')
    insert into AccountInfo values('沙和尚','410334020157144719','13295654665','通天河')
    ---為CardInfo表插入測試數據
    insert into CardInfo values('1027 3726 1536 1135',default,1,'定期',default,500.00,500.00,default)
    insert into CardInfo values('1029 3526 1235 1235',default,2,'活期',default,1500.00,1500.00,default)
    insert into CardInfo values('1324 7532 1536 1935',default,3,'活期',default,4500.00,4500.00,default)


    ---表的查看
    select * from AccountInfo

    select * from CardInfo

    select * from TransInfo

    -----------------T-SQL----------------------------
    --孫悟空修改密碼
    update CardInfo set CardPassWord = 611234 where CustID = 1

    --孫悟空取錢
    --事務開始
    begin transaction tran_Qu
    --定義一個用于記錄錯誤的變量
    declare @tran_error int
    set @tran_error = 0;
    --將孫悟空交易進行記錄
    insert into TransInfo values('1027 3726 1536 1135','支取',200.00,getdate())
    set @tran_error = @tran_error + @@error
    --從孫悟空的帳戶中減去200.00
    update CardInfo set LeftMoney = LeftMoney - 200
    where CardID = '1027 3726 1536 1135'
    set @tran_error = @tran_error + @@error
    if @tran_error <> 0
       begin
          --執行錯誤,回滾事務
          rollback transaction
          print '支取失敗,交易已取消'
       end
    else
      begin
        --沒有發現錯誤,提交事務
        commit transaction
        print'交易成功,已保存新數據'
      end
    go
    select * from CardInfo where CustID = 1

    --沙和尚存錢
    begin transaction tran_bring
    declare @tran_error int
    set @tran_error = 0;
    insert into TransInfo values('1324 7532 1536 1935','存入',1200.00,getdate())
    set @tran_error = @tran_error + @@error
    update CardInfo set LeftMoney = LeftMoney + 1200
    where CardID = '1324 7532 1536 1935'
    set @tran_error = @tran_error + @@error
    if @tran_error <> 0
       begin
          rollback transaction
          print '存入失敗,交易已取消'
       end
    else
      begin
        commit transaction
        print'交易成功,已保存新數據'
      end
    go
    select * from CardInfo where CustID = 3

    --唐僧卡丟失
    update CardInfo set IsLoss='是' where CustID = 2

    --查詢最近10開戶的銀行卡信息
    select * from CardInfo where datediff(dd,OpenDate,getdate()) <= 10

    --查詢最大交易的卡信息
    declare @maxMoney money
    select @maxMoney = max(TransMoney) from TransInfo
    select * from CardInfo where CardID in(select CardID from TransInfo where TransMoney = @maxMoney)

    --查詢交易信息表中總的交易
    declare @allMoney money
    declare @QuMoney money
    declare @CunMoney money
    select @allMoney = sum(TransMoney) from TransInfo
    select @QuMoney = sum(TransMoney) from TransInfo where TransType = '支取'
    select @CunMoney = sum(TransMoney) from TransInfo where TransType = '存入'
    print '總交易金額:' + convert(varchar(10),@allMoney)
    print '支取交易金額:' + convert(varchar(10),@QuMoney)
    print '存入交易金額:' + convert(varchar(10),@CunMoney)

    --給交易信息表加上非聚集索引,并利用非聚集索引查詢數據
    if exists(select * from sysobjects where name = 'IX_CardID')
    drop index BankDB.IX_CardID
    go
    create nonclustered index IX_CardID
    on TransInfo(CardID)
    with fillfactor = 30
    go
    select * from TransInfo with(index = IX_CardID) where CardID = '1324 7532 1536 1935'

    --查詢掛失的賬戶信息
    select * from AccountInfo where CustID in(select CustID from CardInfo where IsLoss = '是')


    --賬戶信息視圖
    if exists(select * from sysobjects where name = 'view_AccountCardInfo')
    drop view view_AccountCardInfo
    go
    create view view_AccountCardInfo
    as
    select AccountInfo.CustID '帳戶編號',CustName '帳戶姓名',IDCard'身份證號碼',TelePhone'客戶電話',Address'客戶地址',
            CardID'信用卡編號',SaveType'儲蓄類型',OpenDate'開戶日期',OpenMoney'開戶金額',IsLoss'是否掛失'
    from AccountInfo join CardInfo
    on AccountInfo.CustID = CardInfo.CustID
    go
    select * from view_AccountCardInfo

    --交易信息視圖
    if exists(select * from sysobjects where name = 'view_TransInfo')
    drop view view_TransInfo
    go
    create view view_TransInfo
    as
    select CardID '卡號',TransType '交易類型',TransMoney '交易金額',TransDate '交易時間'
    from TransInfo
    go
    go
    select * from view_TransInfo

    ---------------第三階段----------------
    --------T-SQL-------------
    if exists(select name from sysobjects where name = 'Tri_TransInfo_Insert')
    drop trigger Tri_TransInfo_Insert
    go
    create trigger Tri_TransInfo_Insert on TransInfo for insert
    as
     declare @TempTransType varchar(10)     --定義臨時的變量存放交易類型
     declare @TempTransMoney money          --定義臨時的變量存放交易金額
     declare @TempCardID varchar(19)        --定義臨時的變量存放卡號
     declare @TempLeftMoney money           --定義臨時的變量存放客戶的余額
     
    --從inserted臨時表中取出數據賦值
    select @TempTransType = TransType,@TempTransMoney = TransMoney,@TempCardID = CardID
    from inserted
    select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID

    if(@TempTransType = '支取')      
      begin
        if(@TempLeftMoney - @TempTransMoney >=1)  
           begin
              update CardInfo set LeftMoney = @TempLeftMoney - @TempTransMoney where CardID = @TempCardID
              print '交易成功!'
           end
         else
           begin
              rollback transaction
              print '余額不足,交易失敗!'
           end
      end
    else
      begin
        update CardInfo set LeftMoney = @TempLeftMoney + @TempTransMoney where CardID = @TempCardID
        print '交易成功!'
      end
    select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID  
    print '卡號:' + convert(varchar(19),@TempCardID) + '  余額:' + convert(varchar(10),@TempLeftMoney)
    go
    set nocount on   --不顯示語句影響記錄行數
    --測試觸發器,沙和尚支取
    insert into TransInfo(CardID,TransType,TransMoney) values('9645 9087 9371 4492','支取',500)
    go

    select * from TransInfo
    select * from accountinfo
    select * from CardInfo

    --利用存儲過程實現備份交易信息的業務
    if exists(select *from sysobjects where name = 'Proc_Backup_TransInfo')
        drop procedure Proc_Backup_TransInfo
    go
    create procedure Proc_Backup_TransInfo
    @BackupDate datetime
    as
    declare @MyError int
    set @MyError = 0
    print '開始備份......'
    if exists(select * from sysobjects where name ='Back_TransInfo')
    begin
     begin tran 
     insert into Back_TransInfo select * from TransInfo where datediff(dd,TransDate,getdate()) >=0
    set @MyError = @MyError + @@error
    if @MyError != 0
       begin
           rollback transaction
          print '備份失敗'
       end
    else
      begin
          commit transaction
           print'備份成功'
       end
      end
    else
      begin
        begin tran 
        select * into Back_TransInfo from TransInfo where datediff(dd,TransDate,getdate()) >=0
        set @MyError = @MyError + @@error
    if @MyError != 0
       begin
          rollback transaction
          print '備份失敗!'
       end
    else
       begin
          commit transaction
          print '備份成功!'
       end
    end
    go
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate()) 
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
    declare @BackDate datetime
    set @BackDate = getDate()
    exec Proc_Backup_TransInfo '2008-10-31'
    go
    select * from Back_TransInfo

    --實現銀行卡的存儲過程
    if exists(select * from sysobjects where name = 'Proc_GetCardID')
        drop procedure Proc_GetCardID
    go
    create procedure Proc_GetCardID
    @CardID varchar(19) output
    as
    declare @TempRand numeric(18,16)
    declare @TempStr varchar(18)
    set @TempRand = rand(datepart(ms,getdate())*10000)
    set @TempStr = convert(varchar(18),@TempRand)
    set @CardID = substring(@TempStr,3,4)+' '+substring(@TempStr,7,4)+' '+substring(@TempStr,11,4)+' '+substring(@TempStr,15,4)
    go
    declare @MyCardID varchar(19)
    exec Proc_GetCardID @MyCardID output
    print '產生的隨即卡號是:' + @MyCardID
    go

    --實現開戶的存儲過程
    if exists(select * from sysobjects where name = 'Proc_OpenAcount')
        drop procedure Proc_OpenAcount
    go
    create procedure Proc_OpenAcount
    @CustName varchar(20),
    @IDCard varchar(18),
    @Telephone varchar(13),
    @OpenMoney money = 1,
    @SaveType varchar(10) = '活期',
    @Address varchar(50)= '地址不詳'
    as
     declare @MyCardID varchar(19)
     declare @MyCustID int
     exec Proc_GetCardID @MyCardID output
    while(1=1)
     begin
     if exists(select * from CardInfo where CardID = @MyCardID)
     exec Proc_GetCardID @MyCardID output
    else
     break
     end
    insert into AccountInfo values(@CustName,@IDCard,@TelePhone,@Address)  
    select @MyCustID = CustID from AccountInfo where IDCard = @IDCard      
    insert into CardInfo values(@MyCardID,default,@MyCustID,@SaveType,default,@OpenMoney,@OpenMoney,default)
    print '尊敬的客戶:' +@CustName +'開戶成功,卡號為:'+@MyCardId

    print '產生的隨機卡號為:' + @MyCardID
    exec Proc_OpenAcount '白骨精','245687556977812345','12478964568'
    exec Proc_OpenAcount '嫦娥公主','745687476912812335','14796653141',@Address = '月亮'

    ----銷戶
    if exists(select * from sysobjects where name = 'Proc_DropAcount')
        drop procedure Proc_DropAcount
    go
    create procedure Proc_DropAcount
     --@CardID varchar(19)
    @IDCard varchar(18) --身份證號
    as
    declare @TempCustID int
    declare @TempLeftMoney money
    --select @TempCustID = CustID from CardInfo where CardID = @CardID 
    --select @TempLeftMoney = LeftMoney from CardInfo where CardID = @CardID
    print '該帳戶余額:' +convert(varchar(10),@TempLeftMoney)+'正在取出。。。'
    delete from CardInfo where custid in(select custid from accountinfo where IDCard=@IDCard)
    delete from  AccountInfo where IDCard=@IDCard
    go
    declare @CardID varchar(19)
    select @CardID = CardID from CardInfo where CustID in(select CustID from AccountInfo where CustName = '唐僧')
    exec Proc_DropAcount '422322001902140019'--根據身份證號刪除
    go
    ---表的查看
    select * from AccountInfo
    select * from CardInfo

    posted @ 2008-10-31 19:31 礦礦 閱讀(503) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 中文字幕亚洲精品| 一区二区免费在线观看| 美女被cao网站免费看在线看| 在线jlzzjlzz免费播放| 亚洲人成在线观看| 一级黄色毛片免费看| 夜夜嘿视频免费看| 久久久无码精品亚洲日韩京东传媒| 香蕉免费在线视频| 国产一精品一aⅴ一免费| 亚洲二区在线视频| 99re6在线精品视频免费播放 | 日日夜夜精品免费视频| 少妇中文字幕乱码亚洲影视| 黄色短视频免费看| 国产伦精品一区二区三区免费迷| 亚洲人成在久久综合网站| 久久亚洲免费视频| 在线亚洲精品自拍| 日韩精品无码免费视频| 午夜男人一级毛片免费 | 亚洲人成色在线观看| 1000部啪啪未满十八勿入免费| 国产A在亚洲线播放| 国产免费人成视频尤勿视频| 免费一区二区视频| 亚洲爆乳无码精品AAA片蜜桃| 亚洲中文字幕日本无线码| 午夜视频在线免费观看| 亚洲欧洲美洲无码精品VA | 国产精品成人观看视频免费| 久久久青草青青亚洲国产免观| 一级午夜免费视频| 亚洲Av无码国产情品久久| 亚洲狠狠婷婷综合久久蜜芽| 国产成人A在线观看视频免费| 亚洲国产理论片在线播放| 18禁美女黄网站色大片免费观看| 久久久久亚洲精品成人网小说 | 4338×亚洲全国最大色成网站| 黄色毛片免费网站|