小编j_t*_*ion的帖子

将CHECK约束添加到已填充的表中

我创建了一个名为testwith column 的表code:

create table test(  
code char(3) not null);
Run Code Online (Sandbox Code Playgroud)

然后我用以下数据填充表格:

insert into test values ('A12');
insert into test values ('B23');
insert into test values ('C45');
Run Code Online (Sandbox Code Playgroud)

然后我改变了列以使其成为char(4):

alter table test
alter column code char(4) not null;
Run Code Online (Sandbox Code Playgroud)

然后我为所有现有数据添加了一个"X",使其变为4个字符长:

update test
  set code='X'+code
where LEN(code)=3;
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好但是当我尝试添加检查约束时:

alter table test
add constraint codeCheck check (code like 'A-Z''A-Z''0-9''0-9');
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

The ALTER TABLE statement conflicted with the CHECK constraint "codeCheck".

我理解错误意味着现有数据违反了我试图添加到表中的检查约束,但为什么呢?

我该怎么做才能使现有数据和检查约束不相互冲突?

sql check-constraints sql-server-2008-r2

8
推荐指数
1
解决办法
2万
查看次数

根据另一个表中的数据从表中选择行

Mentor table
------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)


Student table
-------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)
Run Code Online (Sandbox Code Playgroud)


我想根据语言将导师与学生匹配,例如:

如果导师1知道英语和法语,他将与所有至少懂英语或法语的学生匹配.

mentor1 (english, french)
-------------------------
studentA (english); 
studentB (english, french); 
studentC (english, german);
studentD (english, french, german)  
Run Code Online (Sandbox Code Playgroud)


如果导师2只知道德语,他将与所有至少知道德语的学生匹配.匹配的学生不仅仅知道德语.

mentor2 (german)
----------------
studentC (english, german)
studentD (english, french, german)
Run Code Online (Sandbox Code Playgroud)



通常我会使用一堆if then else拼凑一个sql字符串,但我gridview用来显示数据,所以我不知道我能做什么.

样本代码和教程总是受欢迎的.


编辑:忘了提这个mentor表也​​会有像name和的列contact.所以输出gridview应该是每行1行mentor.

sql vb.net sql-server asp.net select

2
推荐指数
1
解决办法
200
查看次数

> = GETDATE()没有返回具有今天日期的行

---------------------
| ID  |     date    |
|-----+-------------|
|  1  |  2013-12-30 |
|  2  |  2014-01-03 |
|  3  |  2014-02-02 |
---------------------
Run Code Online (Sandbox Code Playgroud)

IDint类型

dateDate类型

当我使用时SELECT CAST (getdate() as date) currentDay, ID FROM table WHERE date >= GETDATE(),它只返回:

--------------------------------------
|  currentDay   |  ID  |     date    |
|---------------+------+-------------|
| 2013-12-30    |   2  |  2014-01-03 |
| 2013-12-30    |   3  |  2014-02-02 |
--------------------------------------
Run Code Online (Sandbox Code Playgroud)

它没有返回行ID=1.

换句话说,>=GETDATE()不返回具有今天日期的行.

我做错了什么?

sql sql-server getdate sql-server-2012

0
推荐指数
1
解决办法
2295
查看次数