1

SQLストアドプロシージャに使用したJavaコードで使用する概念を移植しようとしていますが、それが可能かどうかはわかりません。

基本的に、10 列のテーブルがある場合、毎回同じストアド プロシージャから異なる列の組み合わせを更新できるようにしたいと考えています。つまり、Java では、更新したい値を含むマップを渡し、それらを反復処理して、キャッシュ内の各キー値を更新します。

これには、各列名を含めるためにメソッド シグネチャを変更する必要がなく、更新する必要があるかどうかを判断するために各変数に対して null チェックを行う大きなコードを作成する必要がないという利点があります。これが可能かどうか、または特定のデータベース サーバー (つまり、PostgreSQL、Oracle、MySQL) で可能かどうか、またはすべてが可能かどうかはわかりませんが、構文がわかりません。

4

2 に答える 2

1

SQL Server では、次のようなテーブルを想定して、以下の手順が機能します。

CREATE TABLE MyBigTable(
    ID INT NOT NULL PRIMARY KEY,
    COLUMNA VARCHAR(100) NOT NULL,
    COLUMNB VARCHAR(100) NOT NULL
 )

GO

CREATE PROCEDURE UpdateMyBigTable(@ID INT, @ColumnAValue VARCHAR(100)=NULL, @ColumnBValue VARCHAR(100)=NULL)
AS BEGIN
UPDATE MyBigTable
    SET COLUMNA = CASE WHEN @ColumnAValue IS NULL THEN COLUMNA ELSE @ColumnAValue END,
    COLUMNB = CASE WHEN @ColumnBValue IS NULL THEN COLUMNB ELSE @ColumnBValue END
WHERE ID = @ID
    AND ((COLUMNA <> @ColumnAValue AND @ColumnAValue IS NOT NULL) OR (COLUMNB <> @ColumnBValue AND @ColumnBValue IS NOT NULL));
END

GO

ただし、これは実際には、あなたが求めていたフィールドを列挙するものではありません。動的 SQL を使用しないと、SQL Server でこれを行うのは困難です。

于 2013-09-22T02:51:23.367 に答える