goo blog サービス終了のお知らせ 

PG(プログラマー)&SEによる業務に役立つプログラミング知識 

主に仕事で覚えた業務で使えるプログラム、パソコン、ソフトウェア、ハードウェアの知識を提供していくブログです。

ロックレベル(排他制御) -スナップショット-

2008年03月25日 00時27分16秒 | SQLSERVER2005
SQLSERVERのロックレベルをスナップショットに設定する

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

SELECTするときに、ほかのトランザクションで更新されてコミットされていないときに、更新前情報を読み込む状態。

これを設定しておかないと、ロックされている場合、ロック待ち状態になる。

システム日時変換(無理やり??)

2008年03月22日 16時15分55秒 | SQLSERVER2005
SQLSERVER2005

システム日時をYYYYMMDDhhmmssmsmsms形式の文字に変換

SELECT REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR,GETDATE(),121),'-',''),':',''),'.',''),' ','')


システム日時をYYYYMMDDhhmmss形式の文字に変換

SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR,GETDATE(),120),'-',''),':',''),' ','')

かなり無理やりなんで、もっといいやり方がありそう…

コマンドプロンプトでSQLの実行(osqlコマンド)

2008年03月04日 00時19分51秒 | SQLSERVER2005
コマンドプロンプトやバッチファイルでSQLを実行したいときにはosqlコマンドを使います。

osql -S サーバー -U ユーザー名 -P パスワード -h-1 -Q "SQL文"

で実行できます。

例:コマンドプロンプト(または拡張子.batのファイルに書いておく)を開き、

osql -S 128.1.9.271 -U User -P abcd -h-1 -Q "TRUNCATE TABLE 商品マスタ"

で実行する。

サーバー128.1.9.271 ユーザー名User パスワードabcdで接続したデータベースの商品マスタの全データを消すコマンド

SQLはSELECT文やUPDATE文などでも実行可能です。

また、バッチファイルとして保存することで%1などを使い、パラメータで渡して実行すると便利です。

osql -S 128.1.9.271 -U User -P abcd -h-1 -Q "TRUNCATE TABLE %1"
として、実行時に引数でテーブル名を渡せば、コマンドで指定したパラメータのテーブルのデータを消すことができる。



システム日時取得について(注意点)

2008年02月25日 01時42分27秒 | SQLSERVER2005
システム日時取得方法は

SELECT GETDATE()

GETDATE()関数で取得します。

ストアドプロシージャなどで、同じプログラム内で日時の取得をする場合は、取得日時が変わってしまわないように

まず変数にシステム日時を代入し、その変数を使って取得するのが一般的です。

例:

DECLARE @sDATETIME DATETIME

SELECT @sDATETIME = GETDATE()

以降、日時を取得するときは@sDATETIMEを使用する。

トランザクション

2008年02月23日 09時31分03秒 | SQLSERVER2005
SQL文を試したいが、処理をやり直せるようにしたいときには、トランザクションをうまく使いましょう。
SQL文を発行する前に

BEGIN TRAN

SQL文

とした後で

処理を確定する場合

COMMIT

処理を元に戻したい場合

ROLLBACK

を実行しましょう。

※BEGIN TRAN をしたままCOMMIT、ROLLBACKなど、トランザクションを確定される処理を実行しないと、SQL文で処理されているテーブルはロックされるので気をつけましょう。