SQL 指令, Insert 整批的使用法 |
缺席
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
我有一個 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 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
cxg
中階會員 發表:116 回覆:192 積分:76 註冊:2004-02-12 發送簡訊給我 |
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
|
cxg
中階會員 發表:116 回覆:192 積分:76 註冊:2004-02-12 發送簡訊給我 |
引言: 暗黑破壞神 及 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 發送簡訊給我 |
|
cxg
中階會員 發表:116 回覆:192 積分:76 註冊:2004-02-12 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 TEMPcxg , 讓您費心了. 這兩句 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |