下面是我在做系統時遇到的兩個問題
<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=1drop table 表4exec sp_rename ’表5’,’表4’