わいえむねっと

Contents
Categories
Calendar
2009/08
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
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.054 sec
Chashed: -
2009/08/12 Wed
Microsoft SQL Serverのデータベース比較をテキスト比較ツールと若干のスクリプトだけでどうにかしてみるテスト。
とりあえず、

my @db = qw(foo bar);

foreach my $db(@db)
{
    mkdir $db unless -d $db;

    foreach(split /\n/, `sqlcmd -S server -U id -P password -d $db -Q "SELECT name FROM sysobjects WHERE xtype='U'"`)
    {
        next if /^name\s+$/ || /^-+$/ || /^\(/;

        if(/^([^\s]+)/)
        {
            `bcp $db.dbo.$1 out $db\\$1.csv -S server -U id -P password -c -t,`;
        }
    }
}

とかしてcsvに吐き出して比較してみたけど今ひとつ。

while(<*.csv>)
{
    /(.*)\.csv$/;

    open CSV, $_;
    open FIX, ">$1.txt";

    my @csv = <CSV>;

    my @max;
    foreach(@csv)
    {
        my $i = 0;
        foreach(split /,/)
        {
            my $len = length;
            $max[$i] ||= 0;
            $max[$i] = ($max[$i] < $len ? $len : $max[$i]);
            $i++;
        }
    }

    foreach(sort{$a cmp $b} @csv)
    {
        my $i = 0;
        foreach(split /,/)
        {
            s/\x00/ /;
            my $fmt = sprintf '%% %ds', $max[$i]+1;
            print FIX sprintf $fmt, $_;
            $i++;
        }
    }
}

ソートして固定長にすればそこそこ良好。


ウィスキー強化週間とかなんでしょうか。
今日も今日とてウィスキー。
うぃー。