こんにちは。よろしくお願いします。
###前提・実現したいこと
SQL Server 2014 へ、SQL CLR のユーザー定義型 (UDT) を作成しています。
###発生している問題・エラーメッセージ
SQL Server Management Studio の(クエリーの)結果セット表示で文字列表示をさせたいのですが、バイナリ形式で表現されてしまいます(ToStringメソッドを実装していても、中身がバイナリ表現になってしまうようです。Parse と ToString の各メソッドは型変換用?)
結果セットの値に、(VARCHAR 型などへ明示的に変換しなくても)ソースコード上の _string メンバーの中身を文字列そのものの表現で表示させたいです(試した画像を添付しました。1つめのクエリー(SELECT文)で、2つめの結果セットのように表示させたいです)
実現方法をご存知の方、ご教示いただけますと幸いです。
C#
1using System; 2using System.Data; 3using System.Data.SqlClient; 4using System.Data.SqlTypes; 5using Microsoft.SqlServer.Server; 6 7[Serializable] 8[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, IsByteOrdered = true, IsFixedLength = false, MaxByteSize = -1)] 9public struct StringEx: INullable, IBinarySerialize 10{ 11 public override string ToString() 12 { 13 return _string; 14 } 15 16 public bool IsNull 17 { 18 get 19 { 20 return _null; 21 } 22 } 23 24 public static StringEx Null 25 { 26 get 27 { 28 StringEx h = new StringEx(); 29 h._null = true; 30 return h; 31 } 32 } 33 34 public static StringEx Parse(SqlString s) 35 { 36 if (s.IsNull) 37 return Null; 38 StringEx u = new StringEx(); 39 u._string = s.Value; 40 return u; 41 } 42 43 // SAMPLE 44 public bool IsNumeric() 45 { 46 decimal dmy; 47 return decimal.TryParse(_string, out dmy); 48 } 49 50 private bool _null; 51 private string _string; 52 53 public void Read(System.IO.BinaryReader r) 54 { 55 _null = r.ReadBoolean(); 56 if (!_null) 57 _string = r.ReadString(); 58 } 59 60 public void Write(System.IO.BinaryWriter w) 61 { 62 w.Write(_null); 63 if (!_null) 64 w.Write(_string); 65 } 66}
###補足情報(言語/FW/ツール等のバージョンなど)
- Windows Server 2008 R2 SP1
- Visual Studio 2013 Professional Update 5
- SQL Server 2014 Express Edition SP2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/18 05:52 編集