トップ回答者
計算値項目へのInsert

質問
-
項目:Update(計算値、datetime、NULL 以外)を含むテーブルに対して以下のSQLを
投げると、「列:Updateを更新できません。この列は計算列かUNION演算子の結果のいすれかです。」とエラーになります。
Update項目を除いたフルで列名を積むと期待した結果は得られるのですが、メンテナンス等考慮すると
アスタリスクを使った記載に出来ないかと思っております。どのような文法にすれば良いかお力をお貸しください。
---
insert into A_DB.dbo.testTBL
(koumoku1,koumoku2,koumoku3,koumoku4,Update)
select * from B_DB.dbo.testTBL
愁@teAm1Bit
回答
-
Updateは計算列なので、カッコ内に入れる必要はありません。計算列は直接値を入れる列ではなくて、計算をした結果が入る列です。つまり計算列を直接更新するようなことはできません。
insert into A_DB.dbo.testTBL
(koumoku1,koumoku2,koumoku3,koumoku4)
select * from B_DB.dbo.testTBL
で、OKですが、この時、select * from B_DB.dbo.testTBLが返す列は4列以下である必要があります。
#Updateはそのままでは使えないので、[Update]と囲む必要があります。もっとも、サンプルとして適当な列名を書かれたのかもしれませんが、それでも紛らわしいのであまり使用しない方が良いと思います。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
-
計算列を他テーブルの列にセットすることはできます。元テーブルに計算列が含まれていても、その計算列の値が普通の列の値と同じように扱われて先テーブルの列に挿入されるだけです。
#永続化するしないの設定により、計算列に計算結果保持されているのか、その都度計算されるのかの違いはあります。逆に心配されていることがはっきりわからなかったのですが、もしまだすっきりしないのであれば再度ご質問下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク Avippa 2016年6月24日 5:46
すべての返信
-
Updateは計算列なので、カッコ内に入れる必要はありません。計算列は直接値を入れる列ではなくて、計算をした結果が入る列です。つまり計算列を直接更新するようなことはできません。
insert into A_DB.dbo.testTBL
(koumoku1,koumoku2,koumoku3,koumoku4)
select * from B_DB.dbo.testTBL
で、OKですが、この時、select * from B_DB.dbo.testTBLが返す列は4列以下である必要があります。
#Updateはそのままでは使えないので、[Update]と囲む必要があります。もっとも、サンプルとして適当な列名を書かれたのかもしれませんが、それでも紛らわしいのであまり使用しない方が良いと思います。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
-
-
計算列を他テーブルの列にセットすることはできます。元テーブルに計算列が含まれていても、その計算列の値が普通の列の値と同じように扱われて先テーブルの列に挿入されるだけです。
#永続化するしないの設定により、計算列に計算結果保持されているのか、その都度計算されるのかの違いはあります。逆に心配されていることがはっきりわからなかったのですが、もしまだすっきりしないのであれば再度ご質問下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク Avippa 2016年6月24日 5:46