您的位置:首页 > 数据库

23、SQL Server 数据修改之潜在限制

2013-06-14 23:29 127 查看

数据修改之潜在限制 

即使逻辑正确,将正确的行修改为正确的值,仍为数据修改命令因为某些限制

而不能正常执行。

一、数据类型/数据长度限制

最佳处理方法,使用Cast() 与Convert()解决

二、主键限制

a、主键必须是唯一值的

b、SQL Server提供了两种优秀的主键生成方法:标识列和GUID

1、标识列

本质上说是递增整数。

插入时不可提供标识列值(默认的),但可将identity_insert设置为on,将暂时关闭

标识列的自动添加值,允许在其对应的列中插入数据(显式提供标识列的值)。

注:同一个数据库中不能同时将多个表的identity_insert选项设为on,

设置的基本语法:

set identity_insert 表名  on/off

自动增长:在最近使用的标识列值上递增,有三种方法可以查看最近生成的标识值

1、@@identity:这个全局变量返回SQL Server为任何表,连接和作用域生成的最

后一个标识值

2、Scope_identity():该系统函数返回在当前调用批处理或过程的作用域内生成的最

后一个标识值

3、ident_current(‘table_name’):该函数返回为指定的表生成的最后一个标识值。

如:

print @@identity

print ident_current('bumen')

print ident_current('zhiwei')


结果:

14

14

8

2、全局唯一标识符GUID(Global Unique  Identifiers)

GUDI非常适合用作主键值(实现方法:default 值),GUID是由SQL代码或列

默认值生成的,而不是在插入时自动生成的。GUID是用函数newid( )创建的,如果

将主键的默认值设为newid( ),将为每个新行生成一个新GUID,仅当Insert语句,

没有给列提供值时使用。

如:print newid();
结果:

E78360D4-3ACD-4FAC-A883-34F1CDA475EE

三、外键限制

1、在从表中插入新行时,如果外键值不与任何现有的主键值匹配,插入操作将失败

2、更新有外键指向它的主键值时失败

3、删除主键失败

四、唯一索引限制

值不唯一失败。

五、空值和默认值限制

不给没有默认值且不接受空值的列提供任何值会失败。

六、Check约束限制

一般由用户自定义的约束

七、after解发器限制

八、计算列

如:all=basic+up

更新这样的列时,失败。

九、不可更新视图导致的限制

十、使用With Check Option的视图导致的限制

十一、安全性限制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: