2008年3月31日月曜日

【SQL】NULL値の扱い方1(比較方法)

--NULL値の扱い方1(比較方法)
--①間違ったNULL値の比較方法

IF @value = NULL
print 'null'
ELSE
print 'not null'

--②正しいNULL値の比較方法
IF @value IS NULL
print 'null'
ELSE
print 'not null'

--NULL値でなければ①の比較方法で比較できる。
SET @value = ''
IF @value = ''
print 'value is empty'
ELSE
print 'value is not empty'

【結果】
start of test1
test
end of test1
start of test2

end of test2
not null
null
value is empty

2008年3月27日木曜日

【SQL】キャストの方法(CONVERT関数 数字から文字)

キャストの方法(CONVERT関数 数字から文字)

DECLARE
@value int
SET @value = 2
--文字+数字で出力すると、数字で出力される。
print '0' + @value
--キャストすると文字として出力される。
print
'0' + CONVERT(varchar,@value)

--結果
2
02

2008年3月26日水曜日

【MSSQL】DDLによる資格情報の追加

資格情報はSQLServerが内部的に使用する認証情報で、外部にあるリソースにアクセスする場合に利用される。

--資格情報 credent

--ログイン名 TEST1

CREATE CREDENTIAL credent
WITH
IDENTITY
= 'TEST1' --Windowsユーザー名などを指定

--新しくデータベースにログインプリンシパルを作成する場合
CREATE LOGIN TEST1
WITH
PASSWORD='test', --ログインパスワード
CREDENTIAL = credent --資格情報名

--既存のログインプリンシパルを変更する場合
ALTER LOGIN TEST1
WITH
CREDENTIAL
=credent
--資格情報名

--資格情報を削除する場合
DROP CREDENTIAL credent

ただし、資格情報が使用されている場合は実行時に以下のエラーが発生する。

メッセージ 15541、レベル 16、状態 1、行 8
資格情報 'credent' を削除できません。この資格情報は、サーバー プリンシパルで使用されています。

2008年3月25日火曜日

【MSSQL】DDLによるログインの追加と削除(SQLサーバー認証)

SQLサーバー上のTESTデータベースに
SQLサーバー認証のログインTest_Userを作成する。
(SQLサーバー認証はWindows以外のOSから接続するような場合に使われる認証方法)

USE TEST --データベースの選択

CREATE LOGIN [Test_User]
WITH PASSWORD =N'test' --ログインパスワード
,DEFAULT_DATABASE=test; --デフォルトのデータベースの設定


2008年3月23日日曜日

【MSSQL】DDLによるログインの追加と削除(Windows認証)

WindowsOSのユーザー"Test_User"をSQL Serverに追加する。

CREATE LOGIN [OU812\Test_User]
FROM WINDOWS
WITH DEFAULT_DATABASE =[test];

Windowsユーザーアカウントの指定方法を間違えると以下のエラーが発生した。

CREATE LOGIN [Test_User] --(←コンピュータ名が無い)
FROM WINDOWS
WITH DEFAULT_DATABASE =[test];

メッセージ 15407、レベル 16、状態 1、行 2
'Test_User' は有効な Windows NT 名ではありません。完全な名前 を指定してください。


Test_Userが存在しない場合はクエリーを実行すると以下のエラーが発生する。

メッセージ 15401、レベル 16、状態 1、行 1
Windows NT ユーザーまたはグループ 'OU812\Test_User' が見つかりませんでした。名前を再確認してください。


追加したログインを削除するにはDROP loginnameを使う。

DROP [OU812\Test_User]

2008年3月22日土曜日

【MSSQL】bcpコマンドの使い方

bcpコマンドを使って

テーブル←→ファイル、
クエリー実行結果→ファイル

の操作を行うことができる。

bcp DB名.スキーマ.テーブル名 [in/out] "ファイル名" -T -t; -c

bcp “クエリー文字列” queryout “ファイル名” --T --t; -c

その他、bcpコマンドのオプションは以下のとおり

C:\WINDOWS\system32>bcp
使用法: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m 最大エラー数] [-f フォーマット ファイル] [-e エラー ファイル]
[-F 先頭行] [-L 最終行] [-b バッチ サイズ]
[-n ネイティブ型] [-c 文字型] [-w UNICODE 文字型]
[-N text 以外のネイティブ型を保持]
[-V ファイル フォーマットのバージョン] [-q 引用符で囲まれた識別子]
[-C コード ページ指定子] [-t フィールド ターミネータ] [-r 行ターミネータ]
[-i 入力ファイル] [-o 出力ファイル] [-a パケット サイズ]
[-S サーバー名] [-U ユーザー名] [-P パスワード]
[-T 信頼関係接続] [-v バージョン] [-R 地域別設定有効]
[-k NULL 値を保持] [-E ID 値を保持]
[-h "読み込みヒント"] [-x XML フォーマット ファイルを生成]

【MSSQL】ログファイルとデータファイル

データファイル=*.mdf(プライマリデータファイル) 
              (セカンダリデータファイルは*.ndfを推奨)
ログファイル=*.ldf

①データの参照時の動作
 1.データの参照(SELECT)
 2.データファイルからバッファキャッシュへのデータ読み取り
 3.バッファキャッシュのデータが参照元に返される。

 ・バッファキャッシュは物理メモリに保持される。
 ・バッファキャッシュからのデータの読み取りを
  「論理読み取り」と呼ぶ。

②データの追加、更新時の動作

 1.データの更新(INSERT,UPDATE)
 2.バッファキャッシュの内容変更
 3.ログキャッシュからログファイルへの「ログの先行書き込み」
 4.チェックポイント時にバッファキャッシュから
   データファイルへの物理書き込み

 ・データファイルとログファイルを物理的に異なるディスクに割り当てると
  I/Oが競合しないため処理速度の向上が期待できる。
  (デフォルトでは同じディレクトリ)
  データの保護のためにも分けたほうがよい。