-1

我有一张表 voucher_master。我想制作满足以下条件的复合唯一键

voucher_type    voucher_sub_type     date        Abbreviation
 INV                DOM              1/1/2000       ID            allowed
 INV                DOM              15/1/2000      ID            allowed

 INV                INT              1/1/2000       ID            not allowed
 INV                INT              15/3/2012      ID            not allowed

abbreviation如果为 和 的任何组合创建特定的,则voucher_type无法创建voucher_sub_type相同的。abbreviationvoucher_typevoucher_sub_type

但是,如果为凭证类型和凭证子类型创建缩写,则可以为最初创建的相同组合创建相同的缩写,但日期不同。不能为任何其他组合创建相同的缩写。

如何在 sql server 中执行此操作?

4

3 回答 3

2

我认为您的要求意味着该表应规范化为 2 个表:

优惠券
,其中Abbreviation(voucher_type, voucher_sub_type)UNIQUE

voucher_type   voucher_sub_type   Abbreviation
  INV            DOM                ID          allowed
  INV            INT                ID     not allowed (if the above row exists)

Voucher_Dates
where Abbreviationis a FOREIGN KEYto Voucher(Abbreviation)and
(date, Abbreviation)is either PRIMARYor UNIQUE:

 date        Abbreviation
1/1/2000       ID           
15/1/2000      ID           
于 2012-07-30T15:36:25.857 回答
0

我不擅长服务器 2008 中的 SQL 语法,所以我将编写伪代码,希望您可以编写代码..

if (date!=@newDate where invoice_type=@newVoucher AND coupon_SubType=@newSubVoucher) THEN { 插入记录 }

上面要做的是比较是否存在与您尝试插入的凭证类型相同的日期,如果没有,则可以输入记录。可能有很大的改进空间,但我希望有人可以编辑和添加更多来帮助你。

于 2012-07-30T12:57:56.703 回答
-1

谢谢大家,

我解决了存储过程的问题,并在插入和更新期间检查了所需的条件

于 2012-07-31T07:08:20.523 回答