質問: 私はSQLの一括コピーアップロードメソッドを使用してデータベースにデータをアップロードできるmvc 4アプリケーションを作成しました。 Excelファイルを選択すると、システムにデータをアップロードできます。 これは正常に動作しているので、現在はexcelフィールドがnullの場合にデフォルト値を追加したい これがExcelの列値を抽出する方法です ``` "s1.Gender, " + "s1.Country_of_Birth, " + "s1.Date_of_Birth, " + ``` 私はコードレベルからデフォルト値を追加したい、私はすでにデータベースレベルを使用してこれを処理します。 たとえば、「生年月日」のデフォルト値を追加するには、次の制約を追加しました ``` ALTER TABLE [dbo].[tbl_HEI_student] ADD CONSTRAINT [DF_tbl_HEI_student_Date_of_Birth] DEFAULT (getdate()) FOR [Date_of_Birth] ``` しかし、Excelファイルをdbにアップロードすると、SQL一括コピーアップロードメソッドはデフォルト値データベースの追加を無視してしまいます。 コントローラメソッドからデフォルト値を追加する方法
回答: 問題は、列がNULLを許可することでなければなりません。 あなたのカラムがNULLを許可し、あなたがNULL値を挿入に**与えた**場合、NULLが挿入されます。列に値が指定されていない場合は、DEFAULTが考慮されます。 列をNOT NULLに設定します。 ``` ALTER TABLE [dbo].[tbl_HEI_student] ALTER COLUMN [Date_of_Birth] DATE NOT NULL ``` 以下はデフォルト定義.aspx)です。 編集: ご存知のように、NULL列をBulkInsertすることはできませんし、DEFAULT値がSqlServer側に優先され、私が提案したNOT NULLは、値が指定されていないかNULL以外のものが強制されます。 私はいくつかのオプションを見ることができます。 * 値をデフォルトに設定することで.NET側で処理します(.NETコードを表示する必要があります) * 値を持つ行と列のマッピングを削除したり削除したりすると、デフォルトの制約が適用されます * NULLSを行えるように行を戻すように設定すると、実行中のバルクを実行し、バルクの後にNULLSをデフォルト値に設定するために更新を実行します。 私はBULK INSERTとBCPの両方がNULL値を扱うためにここ.aspx)に示すような修飾子を持っていることを知っています。同じオプションが.NET SqlBulkCopyオプションで.aspx)使用できます.aspx) 。 ここでは 、あなたの問題に関連し、別の問題です。 データベーススキーマはビジネスルールを実施し、データをきれいに保つのに役立つはずです。日付が決してNULLにならない場合は、列をNOT NULLにして、それに従って解決してください。