我的SQL表中有一个销售税栏,其中存储了数据。
我想知道是否可以在销售税
的表格上设置约束专栏说“如果> 2008年6月税是2%”否则“税收是4%”?
是否应该来自与该表相关的存储过程?
答案 0 :(得分:1)
您是否希望自动填充税?
约束只执行验证,而不是数据填充,这可以通过存储过程或触发器来完成。
答案 1 :(得分:1)
您可能需要使用触发器而不是约束。 AFTER INSERT触发器应该可以解决问题。
答案 2 :(得分:1)
如果您想确保“税”列是2或4,具体取决于月份(例如,9月= 9月),那么您可以这样做:
ALTER TABLE SomeTable
ADD CONSTRAINT CK_SalesTax
CHECK ((MONTH(GETDATE()) = 9 AND SalesTax = 2) OR (MONTH(GETDATE()) != 9 AND SalesTax = 4))
显然,根据您的条件而有所不同。例如,为了测试2008年6月之后的日期,它有点简单。
(GETDATE() >= '1 June 2008' AND SalesTax = 2)
您应该能够将此构建为使用与我在第一个示例中删除的类似机制的CHECK约束。
请注意,这仅检查放入表中的值。它不会自动填充。正如其他人所说,如果你想要自动填充,你需要一个触发器。
答案 3 :(得分:1)
您可以使用约束来实现此效果......
伪SQL ...
(YourDate >= '6/1/08' and YourTaxData = 0.02) or (YourTaxData = 0.04)
您可以考虑使用表来托管税收值,并使用您的查询为特定日期/位置提取相应的税额。这比约束更具可扩展性。
答案 4 :(得分:0)
这是一种可以改变或创建新表的简单方法
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