2

問題は、SQLサーバーデータベースにデータを挿入しようとしているのに、何らかの理由で悪名高い「無効な列名」エラーが発生し続け、結果として何も挿入されないことです。

ケースクエリを使用して別の列のフィールドの値に基づく値を挿入しようとしているので、なぜ(ある種の)これが発生しているのかはわかっていると思いますが、実際にはわかりませんこれを正しく行う-コードを参照してください:

INSERT INTO dbo.table_name(points, discount)
VALUES
(3, CASE WHEN (points = 6) THEN 0.5 WHEN (points = 12) THEN 1.0 ELSE 0 END

「ポイント」列に無効な列名が表示されます。それは間違いなくそこにあるので、私の質問が正しくない、またはこれを別の方法で行うべきだと考えるのは正しいですか?

私はSQLServer2008R2を使用しています-それが違いを生むかどうかはわかりません。

4

2 に答える 2

2

VALUESセクションの3番目はまだ「ポイント」列になっていないため、CASEステートメントでこのように参照することはできません。クエリを次のように書き直すことができます。

INSERT INTO dbo.table_name(points, discount)
select 
    x.points
    ,CASE WHEN (x.points = 6) THEN 0.5 WHEN (x.points = 12) THEN 1.0 ELSE 0 END as discount
from (
    select 3 as points union all
    select 12
) x
于 2013-03-14T11:48:13.033 に答える
1

このビジネスロジックは、なんとかして実行できるようにしたいですか?もしそうなら、あなたはおそらく計算列を探しているように私には見えます。

CREATE TABLE table_name
( 
    ID INT,
    Points INT,
    Discount AS CASE WHEN (Points = 6) THEN 0.5 WHEN (Points = 12) THEN 1.0 ELSE 0 END
)

このようにして、テーブルに挿入するデータは常にこれらのルールに準拠します。

インサートが非常にシンプルになりました。

INSERT INTO table_name (Points) VALUES(6);
INSERT INTO table_name (Points) VALUES(5);
INSERT INTO table_name (Points) VALUES(12);
于 2013-03-15T09:21:49.423 に答える