一般的なストアド・プロシージャ構文

14331 ワード

今、よく使われるストレージ・プロシージャの文法を勉強して、少し時間をかけて勉強すれば、ストレージ・プロシージャで複雑な機能を実現し、多くのコードを書くことができます.
 
一.コメント
--C++、c#中//*...*/複数行コメント、C++、C#中/*...*/
 
二.変数(int,smallint,tinyint,decimal,float,real,money,smallmoney,text,image,char,varcharなど)
構文:
DECLARE   

  {   

  {@local_variable data_type}   

  } [,...n]   


例:1.declare@ID int--int型の@IDという変数を示します
 
三.SQL Serverウィンドウで変数の値を印刷
構文:
PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expr   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
四.へんすうわりあて
 
SQLでは、@id=1などの変数に直接コードのように値を割り当てることはできません.このような機能を達成するには、次のように書くことができます.
 
Declare @ID int   

Set @ID = (select 1) --    @ID=1   

Select @id=1 --    @ID=1   

Print @ID   


 
五.変数演算(+,-,*,/,...)
以下必要な場合は変数の説明を省略する
Set @ID = (select 1+5) --   @ID=1+5   

Set @ID=(select 1-@ID) --   @ID=1-@ID   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
六.ひかくオペレータ
 > (greater than). 

 < (less than). 

 = (equals). 

 <= (less than or equal to). 

 >= (greater than or equal to). 

 != (not equal to). 

 <> (not equal to). 

 !< (not less than). 

 !> (not greater than)


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
七.文ブロック:Begin...end
複数の文をブロックとして使用します.たとえば、C++、C#の{}と似ています.
Begin   

 Set @ID1 = (select 1)   

 Set @ID2 = (select 2)   

End   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
八.If, if…else…
構文
IF Boolean_expression   

  {sql_statement | statement_block}   

[ELSE   

  {sql_statement | statement_block}]   


例:
If @id is not null   

   Print ‘@id is not null   

 if @ID = 1   

 begin   

   Set @ID = (select 1 + 1)   

 end   

 else   

 begin   

   set @ID=(select 1+2)   

 end   


上記の例では,比較オペレータ,文ブロック,IFの構文を用いた.
 
九.その他のストアド・プロシージャEXECの実行
EXEC dbo.[Sales by Year] @Beginning_Date=’1/01/90’, @Ending_Date=’1/01/08’   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
十.取引
構文
BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable]   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--> たとえば
BEGIN TRAN   

--      ,  Insert into …   

if @@error <> 0   

BEGIN   

 ROLLBACK TRAN   

END   

else   

BEGIN   

 COMMIT TRAN   

END   


 
十一.カーソル
各ローのデータを格納中にSelect文で取り出して操作することができ、カーソルを使用する必要があります.
構文
DECLARE cursor_name CURSOR   

[LOCAL | GLOBAL]   

[FORWARD_ONLY | SCROLL]   

[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]   

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]   

[TYPE_WARNING]   

FOR select_statement   

   

[FOR UPDATE [OF column_name [,...n]]]   


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--> 例:
DECLARE @au_id varchar(11), @au_fname varchar(20) –       

 --         

 DECLARE authors_cursor CURSOR FOR   

 SELECT au_id, au_fname FROM authors   

 --       

 OPEN authors_cursor   

 --      

 FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname   

 --           

 WHILE @@FETCH_STATUS = 0   

 BEGIN   

   Print @au_id   

   Print @au_fname   

   Print ‘ ’   

   FETCH NEXT FROM authors_cursor   

   INTO @au_id, @au_fname   

 END   

 CLOSE authors_cursor –       

 DEALLOCATE authors_cursor --       


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
十二.If Exists (select ...) update ... else insert ...
よく使われています.データテーブルにレコードがある場合は、そのレコードを更新します.そうしないと、ストレージプロセスでよく使われているものが挿入されます.もっと深く理解し、もっと詳しく理解するには、SQL Serverのヘルプドキュメントを参照してください.
 
  --             ID,     @id,         

Declare @ID int   

Set @ID = (select top(1) categoryID from categories)   

Print @ID  

<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->