2017-12-07 24 views
1

2日間ですが、私はこのタスクに悩まされています。私はMySQLの専門家ではないので、実際に解決策を見つけることはできません。だから基本的に私はこのクエリを持っていますSELECTの結果にtinyintの値を追加する必要があります

sql.Append("select distinct "); 
sql.Append(@"{0}.field1, 
      {0}.field2, 
      {0}.field3, 
      {0}.field4, 
      {0}.field5, 
      --- 
      --- 
      false as customField1, 
      false as customField2, 
      {1}.name as customfield3 
      from {0} join {1} on {0}.field2check = {1}.id where field2check = ?condition"); 

これは私のC#クラスで構築している選択のテキストです。このクエリが完了し、データベースにフィードされ、応答としてDataTableに格納されているテーブルが返されます。私の問題は、bool型が私の中に存在しないため、このフィールド

false as customField1, 
false as customField2, 
{1}.name as customfield3 

が、実際に条件の評価後に得られ、(1)私のC#コードのbooleanとして解釈さtinyint型を返さなければならないということですSQL。私が直接0または1を書き込む場合、この値はC#でInt32として解釈されるBIGINTとしてキャストされます。

私は私が(私の上司は、単にデシベルで機能を保存しない)

CREATE FUNCTION myDb.x_cast_to_tinyint(number bigint) RETURNS tinyint(1) 
return number; 

ように私のDBに格納される。しかし、これは私の場合は禁止されているカスタム関数を作成することができることを知っています。今私は、このクエリの結果を格納する一時テーブルを作成するために探していたが、問題は、私はそれを行う方法の手がかりがないということです。

create temporary table myDB.res (customfield1 tinyint(1)....) as (put the select here) 

の問題のようなものは、ここではまず、私はそれが既存のテーブルプラス3つのカスタム列の同じ構造を持っている必要があります原因は、この表のすべての列を定義する方法がわからない2.あります。このテーブルを正常に作成しても、それはどれくらい持続するのですか。私はそれから*を選択するためにこのテーブルを照会することはできますか?

他のソリューションにも公開されています。他の詳細が必要な場合は

EDITがあります。 C#の部分はそのままです。私のデータテーブルの特定の列のコンバータを作成すると思っただけでなく、このソリューションは大きなノーレスポンスを受けました(そして、私はそれにうまくいきました。私のC#コードはデータを表すだけで、何も知らないはずですデータベースの構造について)

+0

MySQLからInt32値を取得する際の問題点は何ですか?それをC#アプリケーションでブール値に変換しますか? – Cynical

+0

@Cynical問題は、私の上司はどちらもこれを望んでいないということです。実際にデータベース内のテーブルの構造を知り、データテーブルのその特定の列のコンバーターを構築するコードが必要になるためです。代わりに、C#の部分はクエリの結果を表示するだけです。 –

答えて

1

私はそれが機能を追加するよりも複雑だと思うが、あなたは、このような何かを試みることができる:

CREATE TEMPORARY TABLE myTempTable LIKE theFirstTable; 
ALTER TABLE myTempTable 
    ADD COLUMN customField1 TINYINT(1), 
    ADD COLUMN customField2 TINYINT(1), 
    ADD COLUMN customField3 TINYINT(1); 
INSERT INTO myTempTable 
    SELECT o.*, customField1, customField2, customField3 
    FROM originalTable o... 

はもちろん、あなたのニーズに、このアプローチをカスタマイズする必要がありますが、テンポラリテーブルは、接続がクローズされるか、明示的にドロップされるまで持続することが利点です。

+2

MySqlConnectorの代わりにConnector/NET(https://github.com/mysql-net/MySqlConnector)を使用している場合、 'ConnectionReset'は' false'です。デフォルト(https://bugs.mysql.com/bug.php?id=77421)なので、接続が閉じられたときに一時テーブル*が削除されず、 'Table 'myTempTable' already exists'というエラーが発生します。これを修正するには、接続文字列に 'ConnectionReset = true'を追加するか、MySqlConnectorに切り替えます。 –

+0

偉大なアドオン、私はそれを認識していなかった!今日私は学んだ。 – Cynical

関連する問題