«Если условие» как одно из ограничений на поле столбца? - PullRequest
0 голосов
/ 11 сентября 2009

В одной из таблиц SQL, где хранятся данные, есть столбец налога с продаж.

Мне было интересно, можно ли установить ограничение на саму таблицу для налога с продаж

Колонка с надписью "если> июнь 2008 года - 2%," иначе "- 4%"?

Должно ли это происходить из хранимых процедур, связанных с этой таблицей?

Ответы [ 5 ]

1 голос
/ 11 сентября 2009

Вы можете использовать ограничение для достижения этого эффекта ...

псевдо-SQL ...

(YourDate >= '6/1/08' and YourTaxData = 0.02) or (YourTaxData = 0.04)

Вместо этого вы можете рассмотреть возможность использования таблицы для размещения налоговых значений и использования ваших запросов для получения соответствующей налоговой стоимости для данной даты / местоположения. Это более масштабируемо, чем ограничение.

1 голос
/ 11 сентября 2009

Возможно, вам нужно использовать триггер, а не ограничение. Триггер AFTER INSERT должен помочь.

1 голос
/ 11 сентября 2009

Если вы хотите убедиться, что столбец 'налог' равен 2 или 4 в зависимости от месяца (например, месяц 9 = сентябрь), то вы можете сделать это:

ALTER TABLE SomeTable 
   ADD CONSTRAINT CK_SalesTax
   CHECK ((MONTH(GETDATE()) = 9 AND SalesTax = 2) OR (MONTH(GETDATE()) != 9 AND SalesTax = 4))

Очевидно, что для ваших условий. например, проверить даты после июня 2008 года немного проще.

(GETDATE() >= '1 June 2008' AND SalesTax = 2)

Вы должны иметь возможность встроить это в ограничение CHECK, используя механизм, аналогичный тому, который я опускал в первом примере.

Обратите внимание, что проверяется только значение, указанное в таблице. Это не будет автоматически заполняться. Как уже отмечали другие люди, если вы хотите автопополнение, вам нужен триггер.

1 голос
/ 11 сентября 2009

Хотите, чтобы налог был заполнен автоматически?

Ограничения выполняют только проверку, а не заполнение данных, что может быть сделано с помощью хранимых процедур или триггеров.

0 голосов
/ 11 сентября 2009

вот простой способ изменить или создать новую таблицу

 create table #test (
Date datetime,
amount money,
tax as case when date > '06/01/08' then convert(decimal(10,2),4.00) else convert(decimal(10,2),2.00) end,
)

insert into #test
select '05/01/08', 10.00

insert into #test
select '07/01/08', 10.00

select * from #test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...