SQL:すべてのフィールドをリストせずにフィールドの1つを更新する同じテーブルで行をコピーする方法
-
14-10-2019 - |
質問
こんにちは私はこの質問に対する答えを検索しましたが、ここには見つかりませんでした。アクセス2010を使用しています。基本的に、レポート付きのテーブルがあり、レポートには改訂番号があります。フィールドをコピーしてそのうちの1つだけを更新する方法についての答えを見つけましたが、それはややこのように見えます。
INSERT INTO reports (fieldA, fieldB, fieldC, revision, fieldD, fieldE)
SELECT fieldA, fieldB, fieldC, 2, fieldD, fieldE
FROM reports
WHERE <somecondition to select which report to copy>
物事は私がたくさんのフィールドを持っているので、私はこのように見えるものが欲しいです:
INSERT INTO reports
SELECT *, revision=2
FROM reports
WHERE <somecondition to select which report to copy>
コードが間違っていることは知っています。それは私が望むものを説明するためだけです。同様に、すべてのフィールドをリストする巨大なSQLラインを持たない方法ではなく、変更したいフィールドのみを備えています。 (以前のリビジョンのコピーを同じ表に保管したい)
お手伝いできる人によろしくお願いします:)
解決 2
一時的なテーブルを使用して、この質問で興味深い選択肢を見つけました一意のインデックスを備えたSQLクローンレコード
DROP TABLE #tmp_MyTable
SELECT * INTO #tmp_MyTable
FROM MyTable
WHERE MyIndentID = 165
ALTER TABLE #tmp_MyTable
DROP Column MyIndentID
INSERT INTO MyTable
SELECT *
FROM #tmp_MyTable
私は同じことをすることができ、主キーをドロップしてリビジョンを更新し、それを私のテーブルにコピーします。
私が探している解決策ではなく、その間の代替方法です。
編集:
成功せずにこのソリューションを試しました:VBAは、「複数の値を持つフィールドが命令に選択されていない場合は許可されていない(ランタイムエラー3838)」のラインに沿って何かを教えてくれます。
私はOLEフィールドとアタッチメントフィールドの両方を持っていますが、これがエラーの原因であると思われます。しかし、私はそれらを保持する必要があります...:/
他のヒント
MS Accessまたは実際にはSQLの他のフレーバーでこれを行うことはできないと確信しています。あなたができることは、おそらくすでに知っているように、あなたのリビジョン番号とレポートのIDを引用して引数としてコピーするストアドプロシージャ(アクセスの保存クエリと呼ばれる)を使用することです。このようにして、すべてのフィールドを指定する必要がありますが、コードではなくデータベースで1回だけで実行します。例はここにあります:
http://www.stardeveloper.com/articles/display.html?article=2001050101&page=1
hth!