仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 785|回复: 7
打印 上一主题 下一主题

[学习教程] 在Sql Server中使用sql语句批量增加与删除列的默许值

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继在SqlServer中,假如利用了自界说函数作为列的默许值,那末这个自定函数就不成以再修正了。这是一件很忧郁的事变,明天本人就碰到如许的情形。要修正一个已作为列的默许值的函数,提醒以下毛病:
没法对实行ALTER,由于工具正援用它
很无法,只要先把一切援用了该函数的默许值全体删撤除,再来修正这个函数了。

使用sql查询了一下援用了该函数作为列的默许值的表,一共有500多个,查询办法可见上面链接:
在SqlServer中使用sql语句查询一切默许值
要手动一个一个的从microsoftsqlservermanagementstudio中往修正,显现是行欠亨的计划,揣摩了一下,写出以下sql,用来批量删除一切援用了该函数的默许值。

declare@tablenamevarchar(50)
declare@default_constraint_namevarchar(50)
declare@str_sqlvarchar(1000)

declareresult_curcursorfor
selecta.name,object_name(a.parent_object_id)astablename
fromsys.default_constraintsaleftjoinsys.columnsbon
a.parent_object_id=b.object_idandb.column_id=a.parent_column_id
wherea.definition=函数名andb.name=列名

openresult_cur
fetchnextfromresult_curinto@default_constraint_name,@tablename
while@@fetch_status=0
begin
set@str_sql=altertable+@tablename+dropconstraint+@default_constraint_name
exec(@str_sql)

fetchnextfromresult_curinto@default_constraint_name,@tablename
end

在下面示例中利用到了游标,关于游标的利用,能够参考以下链接:
在SqlServer中创立游标示例

删除一切的默许值,在修正了函数后,我们又必要将默许值增加返来。
增加的sql以下:
declare@tablenamevarchar(50)
declare@columnnamevarchar(50)
declare@sqlvarchar(1000)

declareresult_curcursorlocalfor
selecta.name,b.nameascolumnname
fromsys.tablesainnerjoinsys.columnsb
ona.object_id=b.object_id
whereb.name=列名

openresult_cur
fetchnextfromresult_curinto@tablename,@columnname
while@@fetch_status=0
begin
set@sql=altertable+@tablename+addconstraintDF_+@tablename+_+@columnname+_Defaultdefault(函数名))for+@columnname
exec(@sql)

fetchnextfromresult_curinto@tablename,@columnname
end
closeresult_cur
deallocateresult_cur

下面办法用到了使用sql增加束缚,关于该用法,人人能够参考以下链接:
使用Sql语句创立主键,check束缚,默许值,外键

本章次要例举了在SqlServer中使用sql语句批量增加与删除列的默许值的两个示例,但愿能给人人带来匡助。但我们知道,若使用statement,并没有上述需要的数据。试想binlog中记录了一句updatetsetf1=3whereid=3。怎么恢复呢?
小妖女 该用户已被删除
沙发
发表于 2015-1-18 12:05:23 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 17:12:38 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-3 12:00:07 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
admin 该用户已被删除
5#
发表于 2015-2-8 22:44:45 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
变相怪杰 该用户已被删除
6#
发表于 2015-3-8 15:25:21 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
深爱那片海 该用户已被删除
7#
发表于 2015-3-16 03:52:24 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
爱飞 该用户已被删除
8#
发表于 2015-3-22 20:10:20 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表