网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

将MSSQL数据库里数据清空以及更新数据的方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:本文主要为网学会员提供将MSSQL数据库里数据清空以及更新数据的方法,希望对需要将MSSQL数据库里数据清空以及更新数据的方法网友有所帮助,学习一下!


    将MSSQL数据库里数据清空以及更新数据的方法
    2009/05/1610:47[未分类]
    我今天需要将MSSQL数据库里的数据清空,查了下资料。其实清空数据库里的数据的方法很简单,
    就是执行系统存储过程sp_MSforeachtable。
    我试了了一下,在查询分析器里执行EXECsp_MSforeachtable"truncatetable?",结果真的搞定了。
    数据库里的数据全部清空,于是我就查了一下关于sp_MSforeachtable的用法。下面转载的:
    系统存储过程sp_MSforeachtable
    1.简介:
    作为DBA会经常需要检查所有的数据库或用户表,比如:检查所有数据库的容量;看看指定数据库所有用户表的容量,所有表的记录数...,我们一般处理这样的问题都是用游标分别处理处理,比如:在数据库检索效率非常慢时,我们想检查数据库所有的用户表,我们就必须通过写游标来达到要求;如果我们用sp_MSforeachtable就可以非常方便的达到相同的目的:EXECsp_MSforeachtable@command1="print'?'DBCCCHECKTABLE('?')"
    系统存储过程sp_MSforeachtable和sp_MSforeachdb,是微软提供的两个不公开的存储过程,从mssql6.5开始。存放在SQLServer的MASTER数据库中。可以用来对某个数据库的所有表或某个SQL服务器上的所有数据库进行管理,后面将对此进行详细介绍。
    2.参数说明:
    @command1nvarchar(2000),--第一条运行的SQL指令
    @replacecharnchar(1)=N'?',--指定的占位符号
    @command2nvarchar(2000)=null,--第二条运行的SQL指令
    @command3nvarchar(2000)=null,--第三条运行的SQL指令
    @whereandnvarchar(2000)=null,--可选条件来选择表
    @precommandnvarchar(2000)=null,--执行指令前的操作(类似控件的触发前的操作)
    @postcommandnvarchar(2000)=null--执行指令后的操作(类似控件的触发后的操作)
    以后为sp_MSforeachtable的参数,sp_MSforeachdb不包括参数@whereand
    3.使用举例:
    --统计数据库里每个表的详细情况:
    execsp_MSforeachtable@command1="sp_spaceused'?'"
    --获得每个表的记录数和容量:
    EXECsp_MSforeachtable@command1="print'?'",
    @command2="sp_spaceused'?'",
    @command3="SELECTcount(*)FROM?"
    --获得所有的数据库的存储空间:
    EXECsp_MSforeachdb@command1="print'?'",
    @command2="sp_spaceused"
    --检查所有的数据库
    EXECsp_MSforeachdb@command1="print'?'",
    @command2="DBCCCHECKDB(?)"
    --更新PUBS数据库中已t开头的所有表的统计:
    EXECsp_MSforeachtable@whereand="andnamelike't%'",
    @replacechar='*',
    @precommand="print'UpdatingStatistics.....'print''",
    @command1="print'*'updatestatistics*",
    @postcommand="print''print'CompleteUpdateStatistics!'"
    --删除当前数据库所有表中的数据
    sp_MSforeachtable@command1='Deletefrom?'
    sp_MSforeachtable@command1="TRUNCATETABLE?"
    4.参数@whereand的用法:
    @whereand参数在存储过程中起
    到指令条件限制的作用,具体的写法如下:
    @whereend,可以这么写@whereand='ANDo.namein(''Table1'',''Table2'',.......)'
    例如:我想更新Table1/Table2/Table3中NOTE列为NULL的值
    sp_MSforeachtable@command1='Update?SetNOTE=''''WhereNOTEisNULL',@whereand='ANDo.namein(''Table1'',''Table2'',''Table3'')'
    5."?"在存储过程的特殊用法,造就了这两个功能强大的存储过程.
    这里"?"的作用,相当于DOS命令中、以及我们在WINDOWS下搜索文件时的通配符的作用。
    6.小结
    有了上面的分析,我们可以建立自己的sp_MSforeachObject:(转贴)
    USEMASTER
    GO
    CREATEprocsp_MSforeachObject
    @objectTypeint=1,
    @command1nvarchar(2000),
    @replacecharnchar(1)=N'?',
    @command2nvarchar(2000)=null,
    @command3nvarchar(2000)=null,
    @whereandnvarchar(2000)=null,
    @precommandnvarchar(2000)=null,
    @postcommandnvarchar(2000)=null
    as
    /*Thisprocreturnsoneormorerowsforeachtable(optionally,matching@where),witheachtabledefaultingtoits
    ownresultset*/
    /*@precommandand@postcommandmaybeusedtoforceasingleresultsetviaatemptable.*/
    /*Preprocessorwon'treplacewithinquotessohavetousestr().*/
    declare@mscatnvarchar(12)
    select@mscat=ltrim(str(convert(int,0x0002)))
    if(@precommandisnotnull)
    exec(@precommand)
    /*Defined@isobjectforsaveobjecttype*/
    Declare@isobjectvarchar(256)
    select@isobject=case@objectTypewhen1then'IsUserTable'
    when2then'IsView'
    when3then'IsTrigger'
    when4then'IsProcedure'
    when5then'IsDefault'
    when6then'IsForeignKey'
    when7then'IsScalarFunction'
    when8then'IsInlineFunction'
    when9then'IsPrimaryKey'
    when10then'IsExtendedProc'
    when11then'IsReplProc'
    when12then'IsRule'
    end
    /*Createtheselect*/
    /*Use@isobjectvariableissteadofIsUserTablestring*/
    EXEC(N'declarehCForEachcursorglobalforselect''[''+REPLACE(user_name(uid),N'']'',N'']]'')+'']''+''.''+''[''+
    REPLACE(object_name(id),N'']'',N'']]'')+'']''fromdbo.sysobjectso'
    +N'whereOBJECTPROPERTY(o.id,N'''+@isobject+''')=1'+N'ando.category&;'+@mscat+N'=0'
    +@whereand)
    declare@retvalint
    select@retval=@@error
    if(@retval=0)
    exec@retval=sp_MSforeach_worker@command1,@replacechar,@command2,@command3
    if(@retval=0and@postcommandisnotnull)
    exec(@postcommand)
    return@retval
    GO
    这样我们来测试一下:
    --获得所有的存储过程的脚本:
    EXEcsp_MSforeachObject@command1="sp_helptext'?'",@objectType=4
    --获得所有的视图的脚本:
    EXEcsp_MSforeachObject@command1="sp_helptext'?'",@objectType=2
    --比如在开发过程中,没一个用户都是自己的OBJECTOWNER,所以在真实的数据库时都要改为DBO:
    EXEcsp_MSforeachObject@command1="sp_changeobjectowner'?','dbo'",@objectType=1
    EXEcsp_MSforeachObject@command1="sp_changeobjectowner'?','dbo'",@objectType=2
    EXEcsp_MSforeachObject@com
    mand1="sp_changeobjectowner'?','dbo'",@objectType=3
    EXEcsp_MSforeachObject@command1="sp_changeobjectowner'?','dbo'",@objectType=4
    这样就非常方便的将每一个数据库对象改为DBO.
    
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师