下载中心┊文章中心┊软件分类┊更新软件┊推荐下载┊热门软件┊更新文章┊热门文章
 
《拓文asp.net网站内容管理系统》官方演示站。
 设为首页    
 收藏本站
 作者:黄振安
 
网站首页 开源拓文 .NET编程 网站编程 网页设计 图形图像 数据库 软件工程留言本
    站内搜索:   
您现在的位置: 拓文网络 → 文章中心 → 数据库 → MsSQL → SQL SERVER实用技巧[正文]

热 门 文 章

相 关 文 章
  • 两台SQL Server数据同步解决方案
  • 监测你的SQL SERVER--让瓶颈暴露
  • SQL中HAVING从句的用法
  • SQL服务器内存有两种基本管理...
  • SQL中通配符、转义符与"["号的...
  • 常见数据库系统之比较 - 数据...
  • 常见数据库系统之比较 - Oracl...
  • 常见数据库系统之比较 - SYBAS...
  • 常见数据库系统之比较 - DB2数据库
  • MSSQL db_owner角色注入直接获...
  • SQL SERVER实用技巧
     
    [作者:不详    转贴自:不详    点击数:    字体:【大 中 小】    更新时间:2006-3-2 10:23:59]

    删除数据库中重复数据的几个方法
    数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……

    方法一

    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    方法二

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用
        select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
        select distinct * into #Tmp from tableName
        drop table tableName
        select * into tableName from #Tmp
        drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
        假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
        select identity(int,1,1) as autoID, * into #Tmp from tableName
        select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
        select * from #Tmp where autoID in(select autoID from #tmp2)
        最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

     

    更改数据库中表的所属用户的两个方法
    大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……


    --更改某个表
    exec sp_changeobjectowner 'tablename','dbo'


    --存储更改全部表
    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
     @OldOwner as NVARCHAR(128),
     @NewOwner as NVARCHAR(128)
    AS

    DECLARE @Name   as NVARCHAR(128)
    DECLARE @Owner  as NVARCHAR(128)
    DECLARE @OwnerName  as NVARCHAR(128)

    DECLARE curObject CURSOR FOR
     select 'Name'   = name,
      'Owner'   = user_name(uid)
     from sysobjects
     where user_name(uid)=@OldOwner
     order by name

    OPEN  curObject
    FETCH NEXT FROM curObject INTO @Name, @Owner
    WHILE(@@FETCH_STATUS=0)
    BEGIN    
     if @Owner=@OldOwner
     begin
      set @OwnerName = @OldOwner + '.' + rtrim(@Name)
      exec sp_changeobjectowner @OwnerName, @NewOwner
     end
    -- select @name,@NewOwner,@OldOwner

     FETCH NEXT FROM curObject INTO @Name, @Owner
    END

    close curObject
    deallocate curObject


    GO


    SQL SERVER中直接循环写入数据
    没什么好说的了,大家自己看,有时候有点用处

    declare @i int
    set @i=1
    while @i<30
    begin
       insert into test (userid) values(@i)
       set @i=@i+1
    end


    页次:3/8  1篇/页  首页   上一页   下一页   尾页  合计 8 篇 Go:

     
    上一篇:SQL中通配符、转义符与"["号的...
    下一篇:常见数据库系统之比较 - 数据...
    winner 打印本页 关闭窗口

         文 章 评 论
    评论人 查看该文章的评论 发表时间
       笔 名* : 0 50分 60分 70分 80分 90分 100分
    评论内容 *: (最多600字。当前字数:0)


    没有相关评论,欢迎您参与!

    - 关于本站 - 网站帮助 - 下载声明 - 友情连接 - 网站地图 -
    Copyright © 2005-2006 myTopWin.Com. All Rights Reserved . [桂ICP备06004496号]