のうぢから

4E - Everyday Exciting Enjoying Engineer!
Google
 
<< March 2009 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>
 
ブクレジで発売日を忘れよう!
ブクレジ
いつでもどこでもamazonの
買いドキをお知らせ
アメドキ
PROFILE
ARCHIVES
無料ブログ作成サービス JUGEM
 
スポンサーサイト

一定期間更新がないため広告を表示しています

- | | - | -
SQL-Server2005 SQL CLRによる正規表現
JUGEMテーマ:コンピュータ


きっかけは
とあるテーブルとある名前フィールド
苗字と名前の間に半角スペースが入っているデータは
全角スペースに変換してほしい、という依頼から。

『Likeで半角スペースを検索して、Replace()で置換すればいい』と、思ってたら
Like = '% %'
で全角スペースもヒットするのね。。。
知らんかったorz

であれば正規表現でマッチングさせるしかないので
SQL-CLRで作成してみた。
--------------------------------------------------------------
[Regexクラス(C#)]
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;

///
/// ユーザ定義関数に追加
///

public static partial class UserDefinedFUnctions
{
  public static readonly RegexOptions Options =
    RegexOptions.IgnorePatternWhitespace |
    RegexOptions.Singleline;

  ///
  /// 正規表現Matchメソッド
  ///

  /// 文字列
  /// パターン
  /// 1:マッチ,0:アンマッチ
  [SqlFunction]
  public static SqlBoolean RegexMatch(
    SqlChars input, SqlString pattern)
  {
    Regex regex = new Regex(pattern.Value, Options);
    return regex.IsMatch(new string(input.Value));
  }

  ///
  /// 正規表現Replaceメソッド
  ///

  /// 文字列
  /// パターン
  /// 置換パターン
  /// 置換後の文字列
  [SqlFunction]
  public static SqlString RegexReplace(
    SqlChars input, SqlString pattern1, SqlString pattern2)
  {
    Regex regex = new Regex(pattern1.Value, Options);
    return regex.Replace(new string(input.Value), pattern2.Value);
  }
};
--------------------------------------------------------------
[SQL]
UPDATE FROM MstXXX
SET XXXXName =
    dbo.RegexReplace
      (
      XXXXName
      , N'(?^[^¥x20]*)(?[¥x20]{1})(?[^¥x20]*$)'
      , N'${FirstName} ${LastName}'
      )
WHERE dbo.RegexMatch
      (
      XXXXName
      , N'^[^¥x20]*[¥x20]{1}[^¥x20]*$'
      ) = 1;
--------------------------------------------------------------

けっこういいカンジ(^_^)

俺だって子供だ!
評価:
宮藤 官九郎
文藝春秋
¥ 1,575
(2008-10)
Amazonランキング: 6601位
JUGEMテーマ:趣味


そうなんですよね〜
真面目に子育てしなくても
子供は育っていくんですよ。

無理にアレもコレもしなきゃなんて思ってても
子供は相手じゃなかなかうまくいかないし
いい加減にやった方がお互いストレスも溜まらないしね。
せっかくの子育て、楽しんでやらなきゃもったいない♪

うちの子ももうスグ1歳!
早く『おとしゃん』て言ってくれないかな〜(^〜^)
一緒に並んでお散歩したいな〜(^〜^)
やべっ!ついニヤニヤしちゃった♪
最高のリーダー、マネジャーがいつも考えているたったひとつのこと
評価:
マーカス バッキンガム
日本経済新聞社
¥ 1,995
(2006-01)
Amazonランキング: 703位
JUGEMテーマ:趣味


全然ひとつじゃありませんでした(笑)
そりゃそうでしょうけどね、
ひとつだけず〜っと考えられても部下にはいい迷惑ですから。

リーダーとマネージャーは役割が違うので
考え方の重心も変わってくるとのこと。
書いてあることを実践するには
自分の強みを生かして
もっと余裕を持って仕事しないとダメみたいです。
昇格したそうです、私
JUGEMテーマ:日記・一般


今日、来期年棒の交渉中に発覚したんですが、
ヒラからリーダーに昇格したらしいです。
リーダー手当てが来期より3千円支給されるとのこと。

私、『で、リーダーになったら何か業務が変わるんですか?』
上司、『いや、特に』

だそうですf(^^;)
ま、もらえるもんはもらっとくスタンスなので
謹んでお受け致しました。

帰って嫁との話
私、『昇格して3千円給料上がるって♪』
嫁、『来月から借り替える駐車場が3千円高いからぴったりやね♪』
私、『差引きゼロ?』
嫁、『ゼロ♪』

よくできた話です。
MS DTC(分散トランザクション)で発生するロックの対処方法
MS DTC(分散トランザクションコーディネータ)を使用したアプリケーションが
異常終了(もしくは強制終了)した際に
SQL-Server内にプロセスID=-2でロックが残ってしまう場合があります。
(sp_lockで確認)

通常のロックであれば
KILL プロセスID
ステートメントで強制的にプロセスを終了させロックを解除できますが
KILL -2
としてもエラーとなり強制解除ができません。

このプロセスID=-2 は孤立したMS DTCのトランザクションであり、
MS DTC側の作業IDからプロセスを終了しロックを解除する必要があります。

[強制解除手順]
1.MS DTCの作業IDを取得します。
 SELECT DISTINCT req_transactionUOW
 FROM sys.syslockinfo
 WHERE req_spid = -2;

2.1で取得した作業IDからプロセスを強制終了させます。
 KILL '00000000-0000-0000-0000-000000000000'(←作業ID)

以上