2013-03-14 3 views
2

Проблема в том, что я пытаюсь вставить некоторые данные в базу данных SQL-сервера, но по какой-то причине я продолжаю получать позорную ошибку «недопустимое имя столбца», и ничто не вставлено в качестве результат.SQL Insert - Msg 207 Недопустимое имя столбца

Теперь, я считаю, что я знаю, ПОЧЕМУ (вроде) это происходит, поскольку я пытаюсь вставить значение, основанное на значении поля в другом столбце, с использованием запроса к случаю, но я не уверен Я действительно делаю это право - видеть коды:

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 

Я получаю имя недопустимого столбца в столбце «точки». Это, безусловно, так, я правильно понял, что мой запрос неправильный, или что я должен идти об этом по-другому?

Я использую SQL Server 2008 R2 - не уверен, что это имеет значение.

+0

Где находится '(точки = 6)' и '(точки = 12)' приходит? Какие «точки» вы пытаетесь сделать ссылкой? Я не понимаю, что вы здесь делаете. – Taryn

+0

извините, я думаю, что я, вероятно, немного смутил его ... Я хочу, чтобы значение скидки было равным 0, 0.5 или 1.0 в зависимости от значения поля точек, снова я не уверен, что я поступаю правильно с корпусом ... – ChocolateSheep

+0

Но в вашем примере вы вставляете каждую строку со значением точки '3', поэтому ничто никогда не будет иметь значение' points' '6' или' 12'. Вы пытаетесь сделать обновление? Возможно, вам следует разместить в своей структуре таблицы некоторые примеры данных, а затем желаемый результат вашего запроса. – Taryn

ответ

1

Номер 3 в разделе VALUES еще не стал столбцом «точек», поэтому вы не можете ссылаться на него так, как это указано в операторе 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 
+1

Это работает, спасибо! Я не совсем понял использование select при вставке, поэтому я думаю, что мне нужно будет немного изучить это :) – ChocolateSheep

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); 
Смежные вопросы