全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2334
推到 Plurk!
推到 Facebook!

SQL Insert問題??

答題得分者是:SwingGuppy
ponthomas
一般會員


發表:1
回覆:1
積分:0
註冊:2007-04-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-25 10:56:41 IP:211.22.xxx.xxx 訂閱
請問~~
如何把Query查詢出來的資料,當作來源,整批insert進入另外一個table,
而不是一筆一筆insert,因為Query查詢的資料來源跟要insert進入的table是屬於不同Database
是否有方式可達成呢?請指教,謝謝
bruce
中階會員


發表:19
回覆:121
積分:83
註冊:2002-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-25 11:28:30 IP:203.70.xxx.xxx 訂閱
範例:
insert into 目的檔 select * from 來源檔

觀念澄清:
整批或是一筆筆處理與是否跨不同database無關。

bruce
中階會員


發表:19
回覆:121
積分:83
註冊:2002-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-25 11:36:46 IP:203.70.xxx.xxx 訂閱
補充:
insert into 目的檔 select * from 來源檔 where 條件

salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-25 11:41:42 IP:220.132.xxx.xxx 未訂閱
用SELECT 建立記錄和表
你也許已經注意到,INSERT 語句與DELETE語句和UPDATE語句有一點不同,它一次只操作一個記錄。然而,有一個方法可以使INSERT 語句一次加入多個記錄。要作到這一點,你需要把INSERT 語句與SELECT 語句結合起來,象這樣:
INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable
WHERE another_first=’Copy Me!’
這個語句從anothertable拷貝記錄到mytable.只有表anothertable中欄位another_first的值為’Copy Me!’的記錄才被拷貝。
當為一個表中的記錄建立備份時,這種形式的INSERT 語句是非常有用的。在刪除一個表中的記錄之前,你可以先用這種方法把它們拷貝到另一個表中。

如果你需要拷貝整個表,你可以使用SELECT INTO 語句。例如,下面的語句建立了一個名為newtable的新表,該表包含表mytable的所有資料:
SELECT * INTO newtable FROM mytable
你也可以指定只有特定的欄位被用來建立這個新表。要做到這一點,只需在欄位清單中指定你想要拷貝的欄位。另外,你可以使用WHERE 子句來限制拷貝到新表中的記錄。下面的例子只拷貝欄位second_columnd的值等於’Copy Me!’的記錄的first_column欄位。
SELECT first_column INTO newtable
FROM mytable
WHERE second_column=’Copy Me!’
使用SQL修改已經建立的表是很困難的。例如,如果你向一個表中加入了一個欄位,沒有容易的辦法來去除它。另外,如果你不小心把一個欄位的資料型式給錯了,你將沒有辦法改變它。但是,使用本節中講述的SQL語句,你可以繞過這兩個問題。例如,假設你想從一個表中刪除一個欄位。使用SELECT INTO 語句,你可以建立該表的一個拷貝,但不包含要刪除的欄位。這使你既刪除了該欄位,又保留了不想刪除的資料。如果你想改變一個欄位的資料型式,你可以建立一個包含正確資料型式欄位的新表。建立好該表後,你就可以結合使用UPDATE語句和SELECT 語句,把原來表中的所有資料拷貝到新表中。通過這種方法,你既可以修改表的結構,又能存檔原有的資料。
SwingGuppy
初階會員


發表:1
回覆:18
積分:38
註冊:2006-12-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-25 12:18:29 IP:61.62.xxx.xxx 訂閱
遇不同資料庫時可朝兩個方向擇一去處理:

1.交給Delphi處理:使用BatchMove元件(BDE)

BatchMove用法:
BatchMove.Source:=來源資料DataSet
BatchMove.Destination:=目的地DataSet
BatchMove.Mode:=batAppend(新增);batAppendUpdate(找不到重複時新增,遇重複則Update)
BatchMove.Execute;

2.交給資料庫處理:建立 LinkServer 後可直接在Query內下指令。
LinkServer 請查閱 各 Database 的文件。

===================引 用 ponthomas 文 章===================
請問~~
如何把Query查詢出來的資料,當作來源,整批insert進入另外一個table,
而不是一筆一筆insert,因為Query查詢的資料來源跟要insert進入的table是屬於不同Database
是否有方式可達成呢?請指教,謝謝
------
受人點滴,湧泉以報。
ponthomas
一般會員


發表:1
回覆:1
積分:0
註冊:2007-04-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-25 16:01:27 IP:211.22.xxx.xxx 訂閱
感謝各位的鼎力相助
由於是跨不同主機的資料庫
試過以bde元件的BatchMove是可行的
謝謝~~
系統時間:2024-05-18 20:27:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!