SQL知識整理三:変数、グローバル変数、ビュー、事務、異常


変数
1.局所変数の宣言(一つ@)
declare@n int   --変数のキーワードがdeclareであることを宣言します。そして@変数名の後には変数の種類があります。
declare@s varrhar(36)
2.ローカル変数の割り当て
set@s='f 4'
set@n=@n+1  --変数の割り当てには2つの方法があります。一つはsetを通じて、一つはselectです。変数に初期値が付加されていない場合、デフォルトはnullです。nullは計算に参加した結果ですか?それともnullですか?この行の@nはnullに等しいです。
select@n=age from students  --もし変数がselectによって賦課されるなら、ここでは多くのage結果を表で調べられるかもしれません。ここでは検索された最後のage結果のみを付与します。setがこの方法を使うとエラーが発生します。
set@n=(select age from Students where ID='1')--このように彼に値を付けることもできます。
 
グローバル変数
大域変数:システムがあらかじめ定義したもので、いくつかのシステム情報を返します。大域変数は二つの@@で始まります。
一般的な変数:
@CONNEECTIONSは、前回の起動以来の接続または接続を試みた回数を返します。
@CURSOR_ROWSは、最後に開いたラベルの中に現在存在する合格ラインの数を返します(開いているラベルの中でまだ読み取られていない有効データラインの行数を返します)。
@DATEFIRSTは毎週の初日の数字を返します。
@ERRORは最後に実行されたSQL文のエラーコードを返します。
@FETCH_STATUSは、FETCH文によって実行される最後のビーコンの状態を返し、現在接続されている任意のビーコンの状態ではない。
@IDENTITYは最後に挿入した識別値を返します。
@LANGIDは、現在使用されている言語のローカル言語識別子(ID)を返します。
@LANGUAGEは現在使用されている言語名を返します。
@LOCK_TIMEOUTは現在のセッションの現在のロックタイムアウト設定を返します。単位はミリ秒です。
@PROCIDは、現在のプロセスの記憶プロセス識別子(ID)を返します。
@ROWCOUNTは前の文の影響を受ける行数を返します。
@SERVERNAMEは、動作するローカルサーバ名を返します。
@SPIDは、現在のユーザプロセスのサーバプロセス識別子(ID)を返します。
@TRANCOUNTは現在接続されている活動事務数を返します。
@VERIONは、現在インストールされている日時、バージョン、プロセッサタイプを返します。
@CPU_BUSYはSQL Serverから最近の起動以来のCPUの動作時間を返します。その単位はミリ秒です。
@DATEFIRSTは、SET DATEFIRSTコマンドを使用して付与されたDATAFIRSTパラメータ値SET DATEFIRSTを返します。毎週の初日は何曜日ですか?
@@DBTSが現在のデータベースに戻るタイムスタンプの値は、データベース内のタイムスタンプの値が唯一であることを保証しなければなりません。
@ERRORはTransact-SQL文を実行するエラーコードを返します。
@FETCH_STATUSは前回のFETCH文の状態値を返します。
@IDLEはSQL Serverから最近の起動以来、CPUが空室状態にある時間の長さをミリ秒単位で返します。
@IO_BUSYはSQL Serverが最近起動してからCPUが入出力操作を実行するまでにかかった時間の単位がミリ秒です。
@LANGIDは現在使用されている言語IDの値を返します。
@LANGUAGEは現在使用されている言語名を返します。
@LOCK_TIMEOUTは現在のセッションに戻り、ロック待ち時間はその単位がミリ秒です。
@@MAX_CONNEECTIONSはSQL Serverに接続できる最大接続数を返します。
@@MAX_PRECISIONは、decimalとnumericデータタイプの精度を返します。
@NESTLEVELは、現在実行されている記憶処理の入れ子級数の初期値が0に戻ります。
@OPTTIONSは現在のSETオプションの情報を返します。
@PACK_RECEIVEDは、SQL Serverに戻り、ネットワークを介して読み取られた入力パケットの数を返します。
@PACK_SENTはSQL Serverに戻り、ネットワークへの出力パケットの数を返します。
@PACKET_ERRORSがネットワークパケットに戻るエラーの数
@PROCIDは現在の記憶プロセスのID値を返します。
@REMSERVERはリモートSQL Serverデータベースサーバの名前を返します。
@SERVICENAMEはSQL Serverに戻り、どのサービス状態でMSSQLServer MSDTC SQLServerAgentのように動作していますか?
@SPIDは現在のユーザ処理のサーバ処理ID値を返します。
@TEXTSIZEはSET文のTEXTSIZEオプション値SET文でSELECT文のtextまたはイメージデータタイプの最大長さを定義しています。基本単位はバイトです。
@TIMETICKSは各クロックのマイクロ秒数を返します。
@TOTAL_ERRORSディスクに戻り書き込みエラーの数
@TOTAL_READディスク読み出し動作数
@TOTAL_WRITEディスクへの書き込み操作数
@TRANCOUNTは現在の接続でアクティブな状態にあるトランザクション数を返します。
表示
1.ビューは仮想テーブルで、彼が格納しているのは実際のデータではなく、クエリ文ですが、ビューをデータテーブルのように操作することができます。
2.なぜビューを使用しますか?リモートでデータを転送する場合、長すぎるクエリ文字を避けて、流量を減らすことができます。2.彼は繁雑な複数の表を簡単にすることができます。3.安全性、不法なユーザーが敏感なデータにアクセスすることを防止します。私たちはビューを作成してユーザーに見せることができますので、データを見せたいです。
3.ビューの作成
create view vwシティ
as
select city Name from city   --このクエリ文は、任意に書くことができます。複数のレベルのクエリー文が組み込まれていると、下のビューの簡易性が強調されます。短い照会文だけで、本来の煩雑さを解決できるようにするべきです。
4.ビューのクエリー
select*from vw_シティ
5.ビューは照会文として保存されているので、一般的なビューはデータを見るためだけに使用され、一般的には表示を削除しないように変更されます。データベース内のテーブルデータが変更されると、ビューのデータも変わります。ビューはクエリー文に相当します。
 
事務
トランザクションの定義:
         いくつかのT-SQLコマンドがあります。そして、すべての命令は昨日の夜、全体的にデータベースシステムに提出されました。実行する時、このコマンドは全部実行されますか?それとも全部キャンセルされます。したがって、トランザクションは不可分の論理ユニットである。
 
事務の特徴:
         事務には4つの属性があります。原子性、一貫性、分離性、持久性、事務のACID属性とも呼ばれます。
         原子性:事務内のすべての仕事は全部完成するか、あるいは全部完成しないか、一部だけ完成することはありません。
         一致性:事務内のその後の操作はすべてデータベースのその後の制約や規則に違反してはいけません。
         隔離性:事務は直接に隔離されており、同じデータベースを操作する二つの事務があれば、例えばテーブルデータを読み取る。どの事務で見られているかは、他の事務が完了する前の状態か、あるいは他の事務が完了した後の状態です。一つの事柄が別の事柄の中間状態に出会うことはあり得ない。
         耐久性:事務が完了した後、データベースシステムに対する影響は長くなります。システムエラーであっても、システムを再起動した後、その結果は依然として存在します。
 
トランザクションのパターン:
         表示事務:T-SQLを使用してユーザが明確に定義したトランザクションの開始と提出またはロールバックトランザクションです。
         自動提出事務:自動的に実行でき、自動的にロールバックできるような方式はT-SQLのデフォルトの事務方式です。例えば、テーブルレコードを削除する時に、このレコードにメインキーの関係がある場合、削除はメインキーの制約に影響されます。この削除はキャンセルされます。
事務を隠しモードに設定できます。set implicit_transaction on;
         隠蔽事務:事務提出またはロールバック後、SQL Serverが自動的に事務を開始すること。したがって、暗黙的な事務はBegin transactionを使用して開始を表示する必要はなく、直接失業して事務またはロールバックするT-SQL文を提出すればいいです。
使用する場合はset implicit_を設定する必要があります。transaction文は、次のステートメントで新しいものを起動し、次のステートメントで新しいビジネスを開始します。
 
トランザクションの例:
begin tran

    select * from student where  sname=@name and sage=@age

    if @@ERROR<>0

       begin

           rollback tran

           insert into student(studentid,sname,sage) values (1,@name,@age)

           return 0

       end

    else

       begin

       commit tran

       select * from student

       end

go
 
異常
エラー関数:
TRY…CATCHはエラー関数を使用してエラー情報を捕捉する。      ERROR_NUMBER()はエラー番号を返します。      ERROR_MESSAGE()はエラーメッセージの完全テキストを返します。このテキストには、長さ、オブジェクト名、時間などの代替パラメータの値が含まれます。      ERROR_SEVERTY()はエラー重大性を返します。      ERROR_STATE()はエラー状態番号を返します。      ERROR_LINE()は、エラーを引き起こすルーチンの行番号を返します。      ERROR_PROCEURE()はエラーが発生した記憶プロセスまたはトリガーの名前を返します。
 
異常例:
begin try
    select 1 / 0;
end try
begin catch
    exec proc_error_info; --          
end catch
go