2011-01-10 15 views
2

更新ステートメントを使用せずにテーブルのレコードを更新する方法を誰でも知ることができます。 select文を使用することができます。更新ステートメントを使用しない更新テーブル

+4

いいえSELECTステートメントでは不可能です。誰かがUPDATE特権を持っていないのにもかかわらず、これは私には聞こえるが、依然としてUPDATEしたい。その場合、特権の問題に対処します。 – DanSingerman

答えて

6

私がすることができます更新テーブル更新せずに文を考えていません。

+0

多くの場合、データベースに対するアクセス権は、選択OR更新または削除に対して与えられます。これは、それぞれが表に非常に特殊な影響を与えるためです。システム管理者がセカンダリ・エフェクトを持つように設定されているトリガまたはストアド・プロシージャが存在しないかぎり、どのデータベースでもSELECT文が根本的な変更を行うことはほとんどありません。 –

1

select文では不可能です。

行を削除し、同じ行+更新を挿入することができますが、多くの点では更新のようですが、外部キーには多くの問題が発生します。

ああ、あなたのDBAがあなたを殺すかもしれない。

+3

どのような奇妙な答え、どのように選択して削除して挿入しますか? – rrrr

+0

私はそれが選択だと言っていない!私の最初の文は、OPの2番目の文の中の文を否定します。私の2番目の文は、OPの最初の文で質問に答えます –

0

これは、使用しているツールと実際に達成したいものによって異なります。

  • selectステートメントから取得したデータを更新できるライブラリがあります。 (例えば、ORMのNHibernateのように、私はADO.NETとも思う)。これらのライブラリは更新文を作成しています
  • select文を実行するだけでデータを変更する関数やトリガを使用できます。これらの関数またはトリガーでは、まだ更新ステートメントがあります。
  • セキュリティ上の理由から、誰もselectステートメントにupdateステートメントを挿入しないようにする必要があります。したがって、単にselect文を実行するだけではありません。更新ステートメントを使用せずにテーブル の一部のレコードを更新する方法
0

MERGEステートメントを使用してください。

select文を使用することができます。

論理的には、更新、削除および挿入である:次いでDELETE次いでINSERT INTO..SELECTステージングテーブルから、必要に応じてデータを修正、ステージングテーブルにINSERT INTO..SELECT

0

モジュールが作成したselect文を実行したときに、どのようになってこのようになったのかを質問していましたが、SQLインジェクションを読み込む必要があります。何らかの更新ステートメント(更新だけでなく、削除や挿入、またはマージの使用を含む)を行わずに、ユーザーがテーブルに対する更新権限を持っている必要がありますが、選択ステートメントに更新を追加することはできますあなたがSQLインジェクションを避けるためにそれを正しくパラメタ化していない場合は、人生で作成されます。

1

あなたは、これは前の行を削除して、同じ主キーと更新された列の値を持つ新しい行を挿入します

REPLACE INTO tablename(primary key, ...{rest of the columns in the table}) 
VALUES(the same primary key, new values); 

を使用することができます。それほど価値があるわけではありませんが、他の方法があるかもしれません。

関連する問題