none
計算値項目へのInsert RRS feed

  • 質問

  • 項目: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

    2016年6月10日 5:52

回答

  • 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/

    • 回答の候補に設定 星 睦美 2016年6月13日 4:22
    • 回答としてマーク 星 睦美 2016年6月21日 7:34
    2016年6月10日 6:57
  • 計算列を他テーブルの列にセットすることはできます。元テーブルに計算列が含まれていても、その計算列の値が普通の列の値と同じように扱われて先テーブルの列に挿入されるだけです。
    #永続化するしないの設定により、計算列に計算結果保持されているのか、その都度計算されるのかの違いはあります。

    逆に心配されていることがはっきりわからなかったのですが、もしまだすっきりしないのであれば再度ご質問下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク Avippa 2016年6月24日 5:46
    2016年6月10日 8:19

すべての返信

  • update はテーブル名や列名に使用できない予約語ではないですか?
    2016年6月10日 6:22
  • 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/

    • 回答の候補に設定 星 睦美 2016年6月13日 4:22
    • 回答としてマーク 星 睦美 2016年6月21日 7:34
    2016年6月10日 6:57
  • すみません。

    trapemiyaさんのお察しの通り、サンプル列名のつもりで書いていました。


    愁@teAm1Bit

    2016年6月10日 7:42
  • 承知しました。

    仮に、A_DB.dbo.testTBL と B_DB.dbo.testTBL の両方に計算列が含まれている場合は、

    成り立たないとの認識でよいでしょうか。


    愁@teAm1Bit

    2016年6月10日 7:44
  • 計算列を他テーブルの列にセットすることはできます。元テーブルに計算列が含まれていても、その計算列の値が普通の列の値と同じように扱われて先テーブルの列に挿入されるだけです。
    #永続化するしないの設定により、計算列に計算結果保持されているのか、その都度計算されるのかの違いはあります。

    逆に心配されていることがはっきりわからなかったのですが、もしまだすっきりしないのであれば再度ご質問下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク Avippa 2016年6月24日 5:46
    2016年6月10日 8:19