約 80 列の大きな CSV を SQL Server 2008 テーブルにインポートするユーティリティ C# を作成しています。
CSV はインポート前に操作が必要です。たとえば、いくつかの列をマージしたり、日付を変換したりします。したがって、次のINSERT INTO
ようなステートメントを作成しています。
INSERT INTO table VALUES ('abc','blah',...)
私の問題は、テーブルに type の列が含まれていることUNIQUEINDENTIFIER
です。INSERT INTO
値のコレクションを取り、値の文字列を返す既存のメソッドを再利用して、アポストロフィを処理したり、インジェクション攻撃を取り除いたりして、ステートメントに直接ポップしたいので、これは問題です。
UNIQUEIDENTIFIER
このメソッドに渡すことができるa の有効なリテラルを生成する方法はありますか? を試したところGuid.NewGuid.ToString()
、 so のようなリテラルが得られました'bfdb0297-2018-4555-ac12-88064944a671'
が、クエリでデータ切り捨て例外が発生してエラーが発生しました。また、ハイフンを削除してみました。32 個の 16 進文字が機能すると予想していました。
パラメータ化されたクエリが正しい方法であることはわかっていますが、それは既存のコードの大幅な再作業を意味します。
私は C# がかなり得意で、SQL Server についてはブラフに値します。
[編集]
私はいくつかのことをしました。最初に、その列を Guid.NewGuid で更新するクエリを書きました。したがって、切り捨てエラーはそこからではありません。SQL Server のリファレンスを確認すると、id 列の不正な値から切り捨てエラーが返されたのではなく、無効な値のエラーであることがわかりました。また、重要な作業は正しく行わないことの言い訳にはならないという Aaron のコメントも考慮に入れ、現在は正常に機能するパラメーター化されたクエリを生成するメソッドを作成しました。
回答者の皆様、どうもありがとうございました。