0

私の .NET 4.5、C# アプリケーションでは、90 プラスの値を SQL Server 2012 の行に挿入しています。一部の値は「float」列に挿入されます。ただし、この「float」列のソース値の一部は 0 未満です。これらの特定の列では、列に NULL を挿入するか、列にまったく挿入しない必要があります。

これを達成するための最善の方法に関する提案。

Variant 型の SqlParameter を使用して、値を「オブジェクト」に変換しようとしましたが、これは最善の解決策ではありません。

4

3 に答える 3

2
INSERT INTO YourTable (FloatColumn)
SELECT CASE TestValue
          WHEN FloatColumn<0 THEN NULL ELSE TestValue
       END
FROM SourceTable
于 2012-11-09T20:19:43.600 に答える
0

1 つのオプションは、INSTEAD OF INSERTトリガーを使用することです。

例については、MSDN の次の記事を参照してください。

http://msdn.microsoft.com/en-us/library/ms175089(v=SQL.105).aspx

INSTEAD OF INSERT トリガーをビューまたはテーブルで定義して、INSERT ステートメントの標準アクションを置き換えることができます。

このトリガーは挿入時に起動され、ロジックは値を検出し、値が 0 未満の場合にそのフィールドに null を挿入するなどの適切なアクションを実行できます。

于 2012-11-09T20:19:08.563 に答える
0

C# の浮動小数点型の小さな拡張メソッド ハングは、SQL 呼び出しのパラメーター リストを構築する際にうまく機能するはずです。

public static SqlParameter PositiveOrNullSqlParameter( this float value , string name )
{
    return PositiveOrNullSqlParameter( (double) value , name ) ;
}
public static SqlParameter PositiveOrNullSqlParameter( this double value , string name )
{
    SqlParameter p = new SqlParameter( name , System.Data.SqlDbType.Float ) ;
    p.Value = ( value > 0 ? (object) value : (object) DBNull.Value ) ;
    return p ;
}

それを手にしたら…

int insertDataIntoMyTable( double p1 , double p2 , ... , double p99 )
{
    int rowcount ;
    string connectString = ConfigurationManager.ConnectionStrings[ "MyConnectionString" ].ConnectionString ;

    using ( SqlConnection conn = new SqlConnection(  ) )
    using ( SqlCommand    cmd  = conn.CreateCommand() )
    {
        cmd.CommandText = "insertDataIntoTable" ;
        cmd.CommandType = CommandType.StoredProcedure ;

        cmd.Parameters.Add( p1.PositiveOrNullSqlParameter( "@p01" ) ;
        cmd.Parameters.Add( p2.PositiveOrNullSqlParameter( "@p02" ) ;
        .
        .
        .
        cmd.Parameters.Add( p99.PositiveOrNullSqlParameter( "@p99" ) ;

        rowcount = cmd.ExecuteNonQuery() ;

    }

    return rowcount ;
}
于 2012-11-09T21:28:48.877 に答える