SQLSeverでは一度確保したログ用の領域は、ファイルのサイズとして確保しつづけます。


ただ、完全バックアップをした段階で、それ以前のログというのは必要なくなるので、無駄に領域を食われているのに問題がある場合は、ログを切って、圧縮をしなければなりません。


それが次のSQL


-- code -------------------


-- データベースがNorthwindの場合


BACKUP LOG Northwind with no_log
GO


DBCC SHRINKDATABASE(N'Northwind', 10, TRUNCATEONLY)
GO

---------------------------


こんな感じです。


with no_logでチェックポイントをはってます。


んで、次の文で余分な領域を圧縮してます。



基本的にSQLServerがインデックスを自動で選択し、最適な状態でSQLを発行してくれるので、普段は使うことがないとは思います。


が、このインデックスを使って検索条件を処理してほしいってこともあります。


そんな時は次の方法でSQLを発行すれば、インデックスを指定することが可能です。


-- code ------------


SET SHOWPLAN_TEXT ON
GO

select * from Orders where ShippedDate<=getdate()

select * from Orders with(INDEX(ShippedDate)) where ShippedDate<=getdate()

GO

SET SHOWPLAN_TEXT OFF
GO


--------------------


SET SHOWPLAN_TEXT ON

でテキストの実行プランを表示できます。


SET SHOWPLAN_TEXT OFF

で実行プランの表示を無しに戻します。


2つのSELECT文がありますが、withがあるとないとの差があります。


with後のINDEX句でインデックスを指定してます。

(この場合はShippedDateがインデックス名)



実行結果は --------------------


SET SHOWPLAN_TEXT ON
select * from Orders where ShippedDate<=getdate()
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]), WHERE:([Orders].[ShippedDate]<=getdate()))
select * from Orders with(INDEX(ShippedDate)) where ShippedDate<=getdate()
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([Northwind].[dbo].[Orders]))
|--Index Seek(OBJECT:([Northwind].[dbo].[Orders].[ShippedDate]), SEEK:([Orders].[ShippedDate] <= getdate()) ORDERED FORWARD)

------------------------------- です。


何も指定していない時はPK_Ordersが利用されてます。


ShippedDateを指定している時は期待通りShippedDateが利用されてます。

テキストボックスで入力された日付が日付の形式になっているかを確認します。


(今回はYYYY/MM/DD or YYYY-MM-DDの場合の判定です。)


-- code ------------


function is_date($input_date){

if ($input_date != "") {
if(ereg("^([0-9]{4})[-/]+([0-9]+)[-/]+([0-9]+)$", $input_date, $date_parts)){
if(checkdate($date_parts[2], $date_parts[3], $date_parts[1])){

return true;
}
}
}

return false;

}

if (is_date($textbox)){

echo '日付の形式で入力されてます。';

}

else {

echo '日付の形式ではありません。';

}


---------------------


自作でis_date関数を作ります。


まずは空文字ではないことをチェック


次に正規表現で[数字]/or-[数字]/or-[数字]の形式になってるかをチェック


最後に、PHPの組み込み関数で暦に存在する日付かをチェック


全部の条件をクリアすればtrue、それ以外はfalseを返します。


is_dateを利用し、日付を判定し、成否をechoを使って動作検証してます。