2011-12-11 9 views
0

データ型がVARBINARY(MAX)の列を含むテーブルがあります。この列は、c#DBレイヤークラスの異なるタイプの異なる値を表します。それは、int,stringおよびdatetimeとすることができる。今私は、その1つの列を3つの型に変換する必要があります。したがって、intタイプの値は、新しい列である新しい列ObjectIntValueなどになります。TSQLクエリのDateTime.FromBinaryメソッドの変換ロジック

しかし、古い列は、データが保存中longはC#DateTime.ToBinary方法から受け取ったとしてdatetime値が含まれているので、私は、datetime列にデータを送信するとの問題を抱えています。

私はそれをTSQLで作成し、新しい列のその値を変換するために.NETを使用することはできません。アイデアはありますか?

アドバイスありがとうございます! T_SQl

にCLRを使用して

+0

2005年以降のSQL Serverのバージョンは、SQL Serverで.netを使用できます。それは少し遅いかもしれませんが、このような仕事のためには大丈夫です。 –

+0

MSSQLのバージョンは2008 R2ですが、.NETクラスのメソッドはどのように使用できますか?たとえば、DateTime.FromBinary()? – Maybe

+0

CLR統合を使用できますか? – schglurps

答えて

0

は、基本的には、その後、あなたがそれを使用することができ、それを呼び出すために、ユーザー定義関数を作成し、その中にあなたの機能(複数可)と をDLLを登録するアセンブリを作成し使用しています。 何をしたいかによっていくつかのルールがありますが、基本的にはDateTime.FromBinary()だけが必要です。把握するのは難しいはずはありません。

はそれを自分でやったことがないが、これらの人は、彼らがおよそ

CLR in TSQL tutorial

これは1が正しい変換オフで話しているか知っているように見えますか? @schglurpsに対するあなたの応答はちょっと心配です。

更新スクリプトを中断する必要がある場合、つまりこのchnageを実装するときに作業していた更新スクリプトがなければならない場合は、このmanouevreのプロシージャを1つオフにしてから更新します新しいバージョンから。

これを検証したい場合は、新しい列の存在または不存在を確認してください。

その他のオプションは、古いものからの新しい列を埋め込んでそれを呼び出すアプリケーションを作成することです。うん...

これは1つではなく、古い列を維持して維持したい場合、問題があります。

+0

私は解決策[ここ]を見つけました(http://extendeddotnet.blogspot.com/2011/10/convert-net-datetimeticks-to-t-sql.html) – Maybe

+0

いくつかのtwidling後に動作するかもしれませんが、DateTime.ToBinaryは種類ですダニと同様に。 –

+0

関数本体の最初の部分で、 'set @Ticks = @ Ticks&cast(4611686018427387903 as bigint); 'を追加し、すべてがうまくなりました。 – Maybe