2010年03月06日

SQL Server:月末の算出

SQL Serverで月末を算出する式。

select dateadd(m,1,floor(convert(float, <日時>))-day(<日時>)+1)-1

※↑は時刻を切り捨てて算出しているが、<日時>が時刻を持たない、または算出結果に時刻があっても問題ない場合は切り捨ての部分はいらない。

select dateadd(m,1,<日時>-day(<日時>)+1)-1

頻繁に使うならストアドファンクションを作った方が良いかな。
posted by 忘却の達人 at 17:18| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

2010年03月05日

SQL Server:テーブル作成のスクリプトを生成

SQL Serverでテーブルを指定して"CREATE TABLE"のスクリプトを生成する。
SQLDMOオブジェクトを使用。参照設定でDLLをインポートする必要あり。

SQLDMO.ApplicationClass dmo = new SQLDMO.ApplicationClass();
SQLDMO._SQLServer svr = new SQLDMO.SQLServer();
svr.Connect("server", "user", "password");
SQLDMO._Database db = svr.Databases.Item("database", null);
SQLDMO._Table tbl = db.Tables.Item("table", null);
SQLDMO.SQLDMO_SCRIPT_TYPE st
= SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
| SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops
| SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_AllKeys
| SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Checks
| SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify;
string scr = tbl.Script(st, null, null, SQLDMO.SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_UnicodeFile);
Response.Write(scr.Replace("\r\n","<br>\r\n"));
posted by 忘却の達人 at 09:04| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

SQL Server:トリガーの一覧を取得

SQL Serverでテーブル起因のトリガーの一覧を取得する。

select tr.name as trigger_name, ta.name as table_name
from sys.triggers as tr
inner join sys.tables as ta on tr.parent_id = ta.object_id
posted by 忘却の達人 at 09:02| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

2008年04月12日

SQL Server:リンクテーブルで追加しレコードにロックがかかる

SQL Serverへのリンクテーブルで追加した場合にロックが掛かる筈のない状況なのにレコードにロックがかかる。

テーブルにbitの項目があり初期値が設定されてないと何故かロックが掛かるので、初期値を設定しておく。
posted by 忘却の達人 at 11:07| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

2007年12月22日

SQL-Serverの日付時間型で日付+時刻でグループ化をすると日付がずれる

SQL-Serverのテーブルに日付時間型の項目を2つ持つ。
Accessでリンクして一方に日付のみを、もう一方に時刻のみを入力する。
クエリーで日付+時刻の項目を作ってその項目でグループ化をすると日付が2日前になる。
(グループ化しなければ正しく表示される。)

これはAccessの日付時間型が1899/12/30から始まるのに対し、SQL-Serverの日付時間型が1900/01/01から始まることに起因してるっぽい。
恐らくグループ化しない場合はクライアント側で演算し、グループ化した場合はSQL-Server側で演算して、その結果をグループ化してると思われる。

対策としては日付+時刻-Fix(時刻)として、時刻の日付部分を強制的に0にすれば良い。

※あくまでmdbでの話であって、SQL-Serverにシームレスに接続するAccessプロジェクトではこの現象は起こらない。
あとExcelでも同様の現象は起こる。(もしかしてODBCドライバの問題かも)
posted by 忘却の達人 at 18:53| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

2006年10月18日

SQL Server:文字列比較で全角半角大文字小文字を区別する方法

文字列をバイナリに変換して比較する。
convert(binary, FieldA)=convert(binary, FieldB)
posted by 忘却の達人 at 07:14| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

SQL Server:From句をサブクエリにするとエラーになる

サブクエリにエリアス名が無いとエラーになる。エリアス名があれば良い。
posted by 忘却の達人 at 07:11| Comment(0) | TrackBack(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。