0

何年もの間これに出くわしたことがなく、解決策を検索しても見つかりませんでした。SQLではオーバーロードと呼ばれていると思います。基本的に、この SQL のパラメータに "" (空の文字列) がある場合、データベースに値を設定したくありません...

注: C# レベルではなく、SQL レベルで実行したいのです。

string Sql = "IF NOT EXISTS (SELECT * FROM tbl_FileSystemReferences) "
            + "INSERT INTO tbl_FileSystemReferences (UploadDir) VALUES (null) "
            + "UPDATE tbl_FileSystemReferences SET "
            + "UploadDir=@UploadDir, "
            + "ThumbnailDir=@ThumbnailDir, "
            + "ArchiveDir=@ArchiveDir, "
            + "RealDir=@RealDir, "
            + "FlashDir=@FlashDir, "
            + "AssociatedFilesDir=@AssociatedFilesDir, "
            + "EnableArchiving=@EnableArchiving, "
            + "AppWideDir=@AppWideDir, "
            + "FFmpegDir=@FFmpegDir, "
            + "InstallationDir=@InstallationDir ";

SqlCommand Command = new SqlCommand(Sql);
Command.Parameters.AddWithValue("@UploadDir", f.UploadDir);
Command.Parameters.AddWithValue("@ThumbnailDir", f.ThumbnailDir);
Command.Parameters.AddWithValue("@ArchiveDir", f.ArchiveDir);
Command.Parameters.AddWithValue("@RealDir", f.RealDir);
Command.Parameters.AddWithValue("@FlashDir", f.FlashDir);
Command.Parameters.AddWithValue("@AssociatedFilesDir", f.AssociatedFilesDir);
Command.Parameters.AddWithValue("@EnableArchiving", f.EnableArchiving);
Command.Parameters.AddWithValue("@AppWideDir", f.AppWideDir);
Command.Parameters.AddWithValue("@FFmpegDir", f.FFmpegDir);
Command.Parameters.AddWithValue("@InstallationDir", f.InstallationDir);

ExecuteNonQuery(Command);

ストアドプロシージャでこれを行う方法があったことは知っていますが、その方法を思い出せません(オーバーロードと呼ばれていると思います)。

乾杯、

4

2 に答える 2

2

コマンドをテキストとして渡すのではなく、ストアド プロシージャを作成できますか?

そうすれば、「UploadDir=@UploadDir」のような各行を独自の変数に分割し、それが null または空の文字列でない場合にのみコマンドに追加できます。

于 2011-03-16T17:40:50.863 に答える
0

1 つの方法はストアド プロシージャで、これらすべてのパラメータを受け取り、次にクエリの前に次のいずれかを行います。

  • あなたはnullを渡すことを許可します
  • 次のように、各パラメーターが空の場合は null に変換します。

    select @UploadDir = null where @UploadDir = ''

すべてのパラメーターに対してそれを行い、更新クエリで次のようにします。

IF NOT EXISTS (SELECT * FROM tbl_FileSystemReferences)
INSERT INTO tbl_FileSystemReferences (UploadDir) VALUES (null)
UPDATE tbl_FileSystemReferences SET
UploadDir=coalesce(@UploadDir, UploadDir),
ThumbnailDir=coalesce(@ThumbnailDir, ThumbnailDir),
ArchiveDir=coalesce(@ArchiveDir, ArchiveDir),
RealDir=coalesce(@RealDir, RealDir),
FlashDir=coalesce(@FlashDir, FlashDir),
AssociatedFilesDir=coalesce(@AssociatedFilesDir, AssociatedFilesDir),
EnableArchiving=coalesce(@EnableArchiving, EnableArchiving),
AppWideDir=coalesce(@AppWideDir, AppWideDir),
FFmpegDir=coalesce(@FFmpegDir, FFmpegDir),
InstallationDir=coalesce(@InstallationDir, InstallationDir)
于 2011-03-16T18:11:16.823 に答える