ラベル SQLServer2008 の投稿を表示しています。 すべての投稿を表示
ラベル SQLServer2008 の投稿を表示しています。 すべての投稿を表示

2009年12月20日日曜日

[SQLServer]基礎強化メモ - データ整合性

制約や参照整合性についてのメモ。
FOREIGN KEY制約がOracleと大きく違うような気がする。
(FOREIGN KEY制約とCHECK制約は業務で使った事ない・・・)

・PRIMARY KEY
 内部インデックスが作成される。
 NULLは許可しない。
・FOREIGN KEY
 参照キー変更時の挙動をREFERENCES句で設定できる。
  削除/更新時(ON DELETE / ON UPDATE)
  →何もしない/外部キー変更/NULL設定/デフォルト値設定
   (NO ACTION / CASCADE / SET NULL / SET DEFAULT)
 
・UNIQUE制約
 内部インデックスが作成される。
 NULLは1件のみ許可する。
 VARCHAR(MAX)とスパース列には設定できない。
・NOT NULL
・DEFAULT
・CHECK
 固定値以外に、同一テーブルの別の列値に制限することもできる(組織マスタ等の自己参照テーブルなどで使用)

2009年11月18日水曜日

[SQLServer]基礎強化メモ - テーブル定義

テーブル作成についてのメモ。
一般的なテーブルは特筆すべき点なし。
一時テーブルはOracleだと[create grobal temporary table]だけど同一セッションからしか参照できなかった気がする。
他のセッションから参照できるのはSQLServer独自かもしれない。

▼一般的なテーブルの定義文
列のデフォルトはNULL。
列レベルで、インスタンスに設定された照合順序(COLLATE)を上書きすることができる。
照合順序の設定は「列 > データベース > インスタンス」の順に優先する。
--------------------------------------
<文法>
CREATE TABLE スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)
--------------------------------------


▼一時テーブル
一時テーブルはtempdbに作成される。
 ・ローカル一時テーブル
  →作成したセッションのみで使用できる。
 ・グローバル一時テーブル
  →すべてのセッションから参照できる。
   →グローバル一時テーブルを作成したセッションが終了すると、
    グローバル一時テーブルは消滅する。
--------------------------------------
<文法>
[ローカル一時テーブル]
CREATE TABLE #スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)

[グローバル一時テーブル]
CREATE TABLE ##スキーマ名.テーブル名(
列名1 データ型(NULL | NOT NULL) (AS 列別名)
...
)
--------------------------------------