線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1424
推到 Plurk!
推到 Facebook!

SQL 指令, Insert 整批的使用法

缺席
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-11 23:49:03 IP:203.203.xxx.xxx 未訂閱
我有一個 TABLE , 欄位有 80 幾個, 其中有一個欄位fieldname=ANO, type = AutoInc 識別用,不可重覆 有一個欄位 fieldname=GNO , type = string,10 群組代號 and 我想將 所有 GNO='100' 的所有record , 拷貝一份, 變 '101' SQL 指令如下 1. 將 GNO=100 者 , 另存一檔 select * into TEMP from TB where GNO='100' 2. 修改 TEMP update TEMP set GNO='101' 3. 回存 TB insert into TB select * from TEMP 問題 : 1. ANO , 並沒有改到, 所以回存後, 造成 ANO 會有重覆 ? 2. 回存時, select 指定欄位名稱, 寫到瘋掉, and 易遺漏,打錯 請教, 有沒有比較厲害的寫法, 可以漂亮搞定
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-11 23:55:10 IP:203.203.xxx.xxx 未訂閱
擺錯討論區, 怎麼辦 ?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-12 01:48:31 IP:59.104.xxx.xxx 未訂閱
在 update TEMP 之後 alter TEMP 把它的 ANO 欄位拿掉呢?
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-12 15:52:36 IP:203.203.xxx.xxx 未訂閱
Good Idea but 好像會有欄位數目不 match 的錯誤訊息
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-12 23:16:38 IP:210.64.xxx.xxx 未訂閱
喔。對喔。只想到它不用指定的話就會自動新增。 看來。得一個欄位一個欄位寫了。^_^
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-13 10:19:53 IP:222.35.xxx.xxx 未訂閱
引言: Good Idea but 好像會有欄位數目不 match 的錯誤訊息
我測試過在TEMP中去掉ANO然後用一下方法是沒有問題的。 update [TEMP] set GNO='101' ALTER TABLE [TEMP] DROP COLUMN ANO GO insert into TB select * from [TEMP]
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-13 14:58:03 IP:203.203.xxx.xxx 未訂閱
暗黑破壞神 及 cxg , 請問您們是用哪一套 database 我用的是 DBISAM , 真的不行 也許, 這就是 SQL Server 的不相容處吧 !
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-13 15:24:19 IP:222.35.xxx.xxx 未訂閱
引言: 暗黑破壞神 及 cxg , 請問您們是用哪一套 database 我用的是 DBISAM , 真的不行 也許, 這就是 SQL Server 的不相容處吧 !
我用的是 MSSQL Server 。 你試試以下方法呢,不知道是否符合你的要求。 VAR I : INTEGER; ... TABLE1.TableName := 'TEMP'; TABLE1.OPEN; TABLE2.TableName := 'TB'; TABLE2.OPEN; WHILE NOT TABLE1.Eof DO BEGIN TABLE2.APPEND; FOR I:=0 TO TABLE1.FIELDS.COUNT-1 DO IF TABLE1.FIELDS[I].FieldName<>'ANO' THEN // 去掉第一個字段ANO TABLE2.FIELDBYNAME( TABLE1.FIELDS[I].FieldName).VALUE := TABLE1.FIELDS[I].Value; TABLE2.Post; TABLE1.NEXT; END;
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-13 16:26:12 IP:203.203.xxx.xxx 未訂閱
感謝 cxg 的熱情回應, 這個方法是可行的 不過, 我主要是想精進 SQL 指令, 所以, 再看看是否有 SQL 的解法 其實, 這個應用的場合很多耶 ! 好比, 進銷存系統裏, 每次客人都跟我叫一樣的貨, 就不用KeyIn到死 或者, 常常都會重覆發生的事, 都可以叫出舊的資料,改個單號,回填明細資料,對吧 ! 希望有解 !
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-14 14:52:25 IP:222.35.xxx.xxx 未訂閱
DBISAM我沒有用過,不知道一下方法是否可行: 1. 將 GNO=100 者 , 另存一檔 select * into TEMP from TB where GNO='100' 2. 修改 TEMP 將ANO的類型改成INT,去掉AutoInc 3.查出TB中ANO的最大值 select @n=max(ano) from TB update TEMP set GNO='101',ano=@n 1 4. 回存 TB insert into TB select * from TEMP
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-14 16:05:17 IP:203.203.xxx.xxx 未訂閱
引言: DBISAM我沒有用過,不知道一下方法是否可行: 1. 將 GNO=100 者 , 另存一檔 select * into TEMP from TB where GNO='100' 2. 修改 TEMP 將ANO的類型改成INT,去掉AutoInc 3.查出TB中ANO的最大值 select @n=max(ano) from TB update TEMP set GNO='101',ano=@n 1 4. 回存 TB insert into TB select * from TEMP
cxg , 讓您費心了. 這兩句 SQL 怎樣下呀 ? @n 代表啥 ? 這是 ISO 規定的 SQL 語法嗎 ? 在下,才疏學淺, 不會用耶 ! select @n=max(ano) from TB update TEMP set GNO='101',ano=@n 1 是這樣嗎 ? 1. select max(ano) MaxAno from TB 2. nVar := fieldbyname('MaxAno').asInteger 3. update TEMP set GNO='101',ano=:nVar 1 可是 ano 變成固定值,不會累加耶 ! 可見我寫的不對 而且, 用到 delphi 的指令, 不成 @n , 到底是啥 ?
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-14 18:22:22 IP:222.35.xxx.xxx 未訂閱
在這裡面都是SQL命令,其中@N是定義的變量。 1、用DBISAM命令將TEMP中的ANO的類型改成INT,去掉AutoInc 2、select @n=max(ano) from TB 是將數據表TB中ANO的最大值傳給變量@N。 3、update TEMP set GNO='101',ano=@n 1 將臨時表TEMP中的ANO的值都加上@N這樣它就與TB中的ANO沒有重復了。 4、insert into TB select * from TEMP 然後再加到TB中。
系統時間:2024-05-19 16:36:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!