SQL點滴14 編輯資料

2022-02-11 09:17:53 字數 4410 閱讀 9872

資料庫中的資料編輯是我們遇到的最頻繁的工作,這乙個隨筆中我來總結一下最常用的資料編輯。

select into

經常遇到一種情況是,我們希望建立乙個新錶,表中的資料**於原有的乙個表;原有乙個表,但是這個表中的資料已經很混亂,我們希望把這些資料備份出來,然後把原有的表中的資料清除,重新匯入;在這些情況下我們可以使用select into語句。

如果當前使用者擁有建表許可權,在select語句使用關鍵字into可以在資料庫中建立新的 表。這個語句只需要把into new_table_name加到選擇出的列名之後,from關鍵字之前,當然資料可以**於乙個或多個表中。需要說明的是在新錶中只包含select字句中查詢的到的資料,沒有任何鍵,約束,關係。下面例項:

select

top(

10)

*into

new_intervalwaitssample

from

intervalwaitssample

select

*from

new_intervalwaitssample

這個語句就將intervalwaitssample表中的前10行資料放在乙個新建的表new_intervalwaitssample中。

insert into select

現在已經有這個新錶了,如果我們想再從原表intervalwaitssample中選擇一些資料插入到這個新錶中呢,這時候就需要使用insert into select語句了,下面例項:

insert

into

new_intervalwaitssample

select

*from

intervalwaitssample

where

wait_type='

assembly_load

'

這個語句就將原表intervalwaitssample中的所有wait_type='assembly_load'的資料插入到新錶中了。

insert into select union

現在如果我們有一些已知的資料想把這些資料一次性寫入到目標表裡面,應該怎麼辦呢,這時候union語句就很有用了,可以使用insert into select union語句,注意這個語句和insert into select很相似,差別就在於後面的select語句使用了union把多個select連線起來。

insert

into

select

value11 , value12 , value13

union

select

value21 , value22 , value23

union

select

value31 , value32 , value33

… …

下面是例項:

insert

into

new_intervalwaitssample

select

'async_network_io',

'2011-05-09 16:50:00.973',

'0.00

'union

select

'async_network_io',

'2011-05-09 17:00:00.020',

'0.00

'union

select

'async_network_io',

'2011-05-09 17:15:00.123',

'0.00

'union

select

'async_network_io',

'2011-05-09 17:25:00.190',

'0.00

'

使用錶值建構函式我們還可以直接使用錶值建構函式,這個更加簡單直接,**如下:

insert

into

new_intervalwaitssample

values('

async_network_io',

'2011-05-09 16:50:00.973',

'0.00'),

('async_network_io',

'2011-05-09 17:00:00.020',

'0.00'),

('async_network_io',

'2011-05-09 17:15:00.123',

'0.00'),

('async_network_io',

'2011-05-09 17:25:00.190',

'0.00')

從表中「剪下」資料還有一種情況,假設我們想從乙個表中的資料刪除幾條資料,然後把這些刪除的資料放到另外乙個表中。這個動作就像使用剪下,貼上一樣。不過這種情況要注意,他只能從使用者表中剪下資料,不能從檢視中剪下資料。它的語法如下

delete

sourcetable

output deleted.value1,deleted.value2,deleted.value3

into

targettable

from

targettable

where

… …

下面是例項

delete

waitstats

output

deleted.dt,

deleted.wait_type,

deleted.waiting_tasks_count,

deleted.wait_time_ms,

deleted.max_wait_time_ms,

deleted.signal_wait_time_ms

into

new_waitestats

where

waitstats.wait_type='

abr'

要注意的是這裡有乙個很少見的關鍵字deleted,它是當前要刪除的表的別名,這個有點像類中的this關鍵字。

可見即可得的編輯

如果我們是應用程式開發,我相信大多數人還是更願意使用sql server management studio中的影象化介面來運算元據,畢竟提供了這麼多強大的功能,為什麼不用呢。記得我曾經提到過oracle中可以直接修改sql語句選擇得到的資料,當時質問microsoft sql server為何沒有提供這樣強大的功能。呵呵,今天發現sql server還是提供了這樣的功能。不過這種修改只能是單獨乙個表,如果在這個查詢語句中有內連線之類的估計就不行了。廢話不說,上圖:

點選要修改的表右擊選擇edit top 200 rows

當開啟編輯介面的時候,sql server上面會多出乙個標籤

,滑鼠滑到這個標籤上,再滑到panel上,再滑到sql上,點選sql,或者在編輯介面右擊也能看到。如圖1

圖1這時候在上面的文字區就可以編寫自己想要修改的資料的查詢語句如下列:

select

top(

1000

) dt, wait_type, waiting_tasks_count, wait_time_ms, max_wait_time_ms, signal_wait_time_ms

from

new_waitestats

where

(wait_type ='

abr'

)

這裡我們想要修改wait_type=』abr』的資料,點選查詢按鈕 ,在下面的**內就可以看到所有符合條件的資料,這時候就可以修改這些資料了,注意改好之後按回車鍵才會寫到資料庫裡面。這樣做是不是很偷懶呢呵呵,不用寫update語句,直接在裡面修改。

使用編輯器複製貼上資料

還有一種情況可以使用編輯器代替上面的insert into select語句, 如果兩個表的字段完全一樣,我們從乙個表中查詢得到資料,然後複製到另外乙個表中。

首先點選資料行的開頭,選中整行,然後點選copy如圖2

然後右擊想要插入資料的第二個表,滑鼠拖動滾動條到最後,直到顯示一行全部都是空值的一行,然後右擊paste,按回車鍵,這樣一條資料就插入進去了。如圖3

這些都是在平時工作中見到的,覺得很有意思在這裡記錄下來。這些雕蟲小技對於資料庫技術大牛來時不值得一提,還望大牛們看到了不要笑我班門弄斧啊。

SQL點滴14 編輯資料

資料庫中的資料編輯是我們遇到的最頻繁的工作,這乙個隨筆中我來總結一下最常用的資料編輯。select into 經常遇到一種情況是,我們希望建立乙個新錶,表中的資料 於原有的乙個表 原有乙個表,但是這個表中的資料已經很混亂,我們希望把這些資料備份出來,然後把原有的表中的資料清除,重新匯入 在這些情況下...

記錄點滴14

記錄點滴 142012年6 月3日星期日 大二第二學期 第15周 哈嘍,上個星期的 wwj,你現在還好吧。寫這篇記錄之前,先問候一下上個星期的 wwj。換個開場白,換乙個心情來告別這個星期的 wwj吧。說實在,這個星期的心情,可以用 沉悶 來形容。因為什麼呢,我自己憋著不對任何人說,也找不到任何人能...

記錄點滴14

記錄點滴14 2012年6月3日星期日 大二第二學期 第15周 哈嘍,上個星期的wwj,你現在還好吧。寫這篇記錄之前,先問候一下上個星期的wwj。換個開場白,換乙個心情來告別這個星期的wwj吧。說實在,這個星期的心情,可以用 沉悶 來形容。因為什麼呢,我自己憋著不對任何人說,也找不到任何人能讓我把自...