PHPからストアドプロシージャ(T-SQL)に値を渡す方法を変更したいと考えています。私はわずかなPHPの経験しか持っていませんが、Web開発者との議論からそのプロセスを説明しようとします。SQL更新オプションパラメータPHP
現在のプロセス
例テストテーブル
この例では、このようなフィールド3のようなレコードを更新するために、我々は戻って、ストアドプロシージャにすべての既存の値を渡すことになります。
EXEC dbo.UpdateTest @ID = 1, @Field1 = 'ABC', @Field2 = 'DEF', @Field3 = 'GHI', @Field4 = 'JKL'
Field3を更新するには、ボタンをクリックする必要があります。これにより、ストアドプロシージャを実行してデータを更新する新しいページに移動します。新しいページは値を認識しないので、UPDATE
を実行する前に値を取得するためにSELECT
プロシージャを実行する必要があります。
スクリプトは、更新されたデータをリロードするページにユーザーをリダイレクトし、変更が画面に反映されます。私たちがやりたい何
新しいプロセス
は、我々が変更したいフィールドを渡しています。
EXEC dbo.UpdateTest @ID = 1, @Field2 = 'DEF', @Field3 = 'GHI'
私たちの解決方法は簡単です。最初に、すべての更新可能フィールドをオプションに設定します(NULL
を渡すことができます)。次に、パラメータがNULL
(渡されていない)かどうかを確認し、無視する場合は無視し、更新しない場合は更新します。
UPDATE
dbo.Test
SET
Field1 = NULLIF(ISNULL(@Field1,Field1),'-999')
,Field2 = NULLIF(ISNULL(@Field2,Field2),'-999')
,Field3 = NULLIF(ISNULL(@Field3,Field3),'-999')
,Field4 = NULLIF(ISNULL(@Field4,Field4),'-999')
WHERE
ID = @ID
我々はまだNULL
値がを渡された場合の手順はNULL
にデータベースレコードを更新したいが。この問題を回避するには、NULL
(この場合は-999)に任意の値を代入して、任意の値(-999)が渡された場合にプロシージャがNULL
を更新するようにしました。
このソリューションは、私の目では、問題を解決するにはかなり面倒です。もっと良い解決策はありますか?私たちは何を間違っていますか?
質問に従うかどうかわかりません。しかし、ストアドプロシージャの実行時に名前付きパラメータを渡しているためです。 EXEC dbo.UpdateTest ID = 1、Field2 = 'DEF'、Field3 = 'GHI' 他のすべてのフィールドにnullを送信しています。値がnullになることは何もする必要はありません。私はそれのための必要性を見ないので、私は-999の値を渡すことはありません。 データベースには何を書いていますか?ヌルか-999ですか? –
「私たちは何を渡したいのですか」という行には何も問題はありません。 MsSqlサーバー上にある場合、異なるSQLプラットフォームは異なる動作をします。 –
@記号の使用のために私は答えのセクションに投稿しました。私がコメントのセクションに置くとブロックしようとします。 –