现在的位置: 首页 > 综合 > 正文

sql server 数据行无法删除 和 复制表结构

2013年02月19日 ⁄ 综合 ⁄ 共 963字 ⁄ 字号 评论关闭

 

下面是我在做系统时遇到的两个问题

<1>.sql server中多行所有数据重复,无法更新或删除问题

通常是在没有主键的情况下的表.

错误:

先确认一下表中有没有主键,要是没有就得使用临时表来实现删除重复的行。


方法一:
DELETE FROM 表名 WHERE 主键字段名
IN(
SELECT MAX(主键字段名) AS 主键字段名 FROM表名 GROUP BY 其他字段
HAVINGCOUNT(1)>1)

方法二:
SELECT 字段列表 INTO #T FROM 表名GROUP BY 字段列表
--先删除原来的数据表,再插入不重复的语句
TRUNCATE TABLE 表名
INSERT INTO 表名 SELECT * FROM #T

DROP TABLE #T

示例:

方法一:

delete from tab_test2 where id=(select max(id) from tab_test2 group by id,uid having count(1)>1)

 

方法二:注意:#t是临时表,在tempdb数据库中的临时表节点下可以找到,sqlserver服务重启就会消失的表.

select id,uid into #t from tab_Test2 group by id,uid

truncate table tab_Test2

insert into tab_Test2 select * from #t

 

<2>.复制其它表的结构到一指定的表中去

 

比如以下的例子:

  有如下三个表:

  表A:字段1,
字段2,
字段3

  表B:字段1,
字段2,
字段3

  表C:字段1,
字段2,
字段3

  现在想复制A表的字段1,B表的字段2,C表的字段3到表4中去。不需要表中的数据。

  用SQL语句应如何实现呢?

考虑一个问题,所到的指定表是不是空表?




/*table4不存在时*/
  
  select a.col1, b.col2, c.col3
  into table4
  from tableA a, tableB b, tableC c
  where 1 = 0
 

 

但是,一旦4已经存在的话,会报错。如果是想在表4中增加这几个字段,但这些字段的数据不需要添加到表4中来

select
  *
  into 表5
  from
  表4 m
  left join
  (select a.字段1,b.字段2,c.字段3 from 表A a,表B b,表C c where  1<>1) n
  on
  1=1

drop table 表4

exec sp_rename ’表5’,’表4’


 

 

 

抱歉!评论已关闭.