SQL Server数据修改之潜在限制

2014-11-24 16:57:27 · 作者: · 浏览: 0
SQL Server数据修改之潜在限制
即使逻辑正确,将正确的行修改为正确的值,仍为数据修改命令因为某些限制
而不能正常执行。
一、数据类型/数据长度限制
最佳处理方法,使用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的视图导致的限制
十一、安全性限制