很小很小的问题

tanshi 2009-11-03 10:49:54

ALTER COLUMN column_name
{
[ type_schema_name. ] type_name [ ( { precision [ , scale ]
| max | xml_schema_collection } ) ]
[ COLLATE collation_name ]
[ SPARSE | NULL | NOT NULL ]
| {ADD | DROP }
{ ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE }
}
| [ WITH { CHECK | NOCHECK } ]

里的[ WITH { CHECK | NOCHECK } ]是什么意思??各位前辈不要笑啊~~~
...全文
183 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chinajiabing 的回复:]
SQL code---tryCHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以表达式中存在这些值可能会覆盖约束。例如,假设对int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值10(即 MyColumn=10)。如果将值NULL 插入到 MyColumn,SQL Server2005 数据库引擎 将插入NULL 且不返回错误。
?-
[/Quote]
cool
tanshi 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liping_ycit 的回复:]
应该是对表中原有的数据是否进行检查吧。with check 就是在改过属性后要检查,with nocheck 不检查
[/Quote]
如果with nocheck会覆盖原有约束吗?
Pxylovell 2009-11-06
  • 打赏
  • 举报
回复
学习了··
ChinaJiaBing 2009-11-06
  • 打赏
  • 举报
回复


---try


CHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以表达式中存在这些值可能会覆盖约束。例如,假设对 int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值 10(即 MyColumn = 10)。如果将值 NULL 插入到 MyColumn,SQL Server 2005 数据库引擎 将插入 NULL 且不返回错误。

如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效。这种情况可能会产生意外结果,如下面的示例所示。

复制代码
CREATE TABLE CheckTbl (col1 int, col2 int);
GO
CREATE FUNCTION CheckFnctn()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*) FROM CheckTbl
RETURN @retval
END;
GO
ALTER TABLE CheckTbl
ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );
GO


添加的 CHECK 约束指定表 CheckTbl 必须至少包含一行。但是,因为表中不包含任何可供检查此约束的条件的行,所以 ALTER TABLE 语句将成功。

执行 DELETE 语句时不验证 CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果。例如,假设对表 CheckTbl 执行下列语句。

复制代码
INSERT INTO CheckTbl VALUES (10, 10)
GO
DELETE CheckTbl WHERE col1 = 10;


即使 CHECK 约束指定表 CheckTbl 必须至少包含 1 行,DELETE 语句也会成功。

guguda2008 2009-11-05
  • 打赏
  • 举报
回复
约束和类型分两句改
daiyueqiang2045 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 colacat911 的回复:]
就是添加约束时是不是需要验证已存在的数据符合约束
[/Quote]


如上说法,对头
tanshi 2009-11-05
  • 打赏
  • 举报
回复
哦,那我这么
ALTER TABLE 订购单明细 alter column 数量 tinyint check (数量 between 0 and 1000) default not null)

写为什么会出错啊
=====================
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'check' 附近有语法错误。
liping_ycit 2009-11-05
  • 打赏
  • 举报
回复
应该是对表中原有的数据是否进行检查吧。with check 就是在改过属性后要检查,with nocheck 不检查
忆轩辕 2009-11-04
  • 打赏
  • 举报
回复
就是添加约束时是不是需要验证已存在的数据符合约束
wzy_love_sly 2009-11-03
  • 打赏
  • 举报
回复
create table tb(i int)
insert into tb select 5
insert into tb select 20

--失败
alter table tb add constraint con_check check (i>10)
--成功,不验证现有数据
alter table tb with nocheck add constraint con_check check (i>10)
--小F-- 2009-11-03
  • 打赏
  • 举报
回复
保证插入数据的有效性和完整性。
比如性别列,只能是“男”“女”,
输入“abc”就是无效的,所以你可以添加约束
alter table 表名
add constraint chk_sex check(性别 in ('男','女'))进行约束
liminlovemama 2009-11-03
  • 打赏
  • 举报
回复
指定列要不要约束
bancxc 2009-11-03
  • 打赏
  • 举报
回复
比如说约束一个数的范围

create table tb(id int)
go

ALTER TABLE tb ADD CONSTRAINT exd_check CHECK (id > 10)

INSERT INTO TB VALUES(100)

INSERT INTO TB VALUES(9)
--这个会报错 服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'exd_check' 冲突。该冲突发生于数据库 'master',表 'tb', column 'id'。
语句已终止。
tanshi 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bancxc 的回复:]
约束吧
[/Quote]
可以再详细点吗?比如是做什么用的,什么时候能用到??

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧