sql server 資料行無法刪除 和 複製表結構

來源:互聯網
上載者:User

 

下面是我在做系統時遇到的兩個問題

<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’


 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.