我不知道是否可能。 我有一个表来保存书籍问题的记录返回。这一个中有两列是[status]和其他[bookid]。我想在sql中添加一个约束,限制用户为status =“插入重复记录问题“与同一个bookid。
例如,如果已经存在status ='issue'且bookid = 1的记录,那么它不能允许插入status =“issue”和bookid = 1的其他记录,但是我可以使用其他状态的多字符记录staus ='return'和bookid = 1可能会多次出现。
或者在c#
中可能有使用linq to sql的解决方案答案 0 :(得分:1)
这里有一个复杂的情况,因此UNIQUE
约束对你没有帮助。您需要CHECK
约束。
您首先需要一个功能来进行检查:
CREATE FUNCTION dbo.IsReturnDuplicate
(
@id INT,
@bookid INT,
@status VARCHAR(MAX)
)
RETURNS BIT
AS
BEGIN
RETURN (SELECT TOP 1 COUNT (*) FROM bookreturns WHERE (id <> @id) AND (status = @status) AND (bookid = @bookid) AND (status = 'issue')
END
如果表中已有一行状态为“issue”并且ID不同,则返回1
然后,您可以使用此功能
创建CHECK
约束
CREATE TABLE bookreturns (
--...
CONSTRAINT CK_bookreturns_status CHECK (dbo.IsReturnDuplicate(id, bookid, status) == 0)
)
答案 1 :(得分:1)
通常,您不需要用户定义的功能。在SQL Server(以及许多其他数据库)中,您只需使用筛选索引:
create unique index unq_bookissue
where status = 'issued' ;
在早期版本的SQL Server中,您可以使用计算列执行此操作,假设您有一个包含以下列的表:
BookId
,跨行重复。Status
,当值为issue
时,它应该是唯一的。BookIssueId
,唯一标识每一行。然后,添加计算列以跟踪status = 'issue'
:
alter table t add computed_bookissueid as (case when status = 'issue' then -1 else BookIssueId end);
现在在此列上添加一个唯一索引BookId
:
create unique index unq_bookid_issue on (BookId, computed_bookissueid);
答案 2 :(得分:0)
<input id="box1" type="checkbox" class="checkbox" value="bx1=1"> <label for="box1"></label>
<input id="box2" type="checkbox" class="checkbox" value="bx2=1"> <label for="box1"></label>
<script>
$(".checkbox").on("change", function() {
var values = [];
$('.checkbox:checked').each(function() {
var result = $(this).val();
values.push(result);
});
var key = $(".link").html(values.join("&"));
document.write('<a href="http://www.example.com/test.html?' + key + '">Open here</a>');
});
</script>
为我工作