我看到的這兩個答案在Informix中都很好,而且基本上都是標準SQL。也就是說,表示法:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
使用Informix和所有DBMS都很好。(5年前或更多年前,MySQL并不總是支持這類東西;它現(xiàn)在對這種標準SQL語法有很好的支持,AFAIK在這種表示法上可以正常工作。)列列表是可選的,但按順序指示目標列,因此SELECT結(jié)果的第一列將進入第一列,以此類推。如果沒有列表,則選擇結(jié)果的第一列進入目標表的第一列。
系統(tǒng)之間的不同之處在于用于標識不同數(shù)據(jù)庫中的表示法-對于數(shù)據(jù)庫間操作(更不用說數(shù)據(jù)庫間數(shù)據(jù)庫管理系統(tǒng)),該標準沒有什么可說的。使用Informix,您可以使用以下符號來標識表:
[dbase[@server]:][owner.]table
也就是說,您可以指定一個數(shù)據(jù)庫,如果數(shù)據(jù)庫不在當前服務器中,則可以選擇標識承載該數(shù)據(jù)庫的服務器,然后是可選的所有者點,最后是實際的表名。SQL標準使用術(shù)語模式來表示Informix所稱的所有者。因此,在Informix中,下列任何一個符號都可以識別一個表:
table"owner".tabledbase:tabledbase:owner.tabledbase@server:tabledbase@server:owner.table
所有者一般不需要被引用;但是,如果您確實使用了引號,則需要將所有者名拼寫正確-它會區(qū)分大小寫。即:
someone.table"someone".tableSOMEONE.table
都能識別出同一張表。使用Informix,模式ANSI數(shù)據(jù)庫有一個輕微的復雜性,其中所有者名稱通常轉(zhuǎn)換為大寫(Informix是例外)。也就是說,在模式ANSI數(shù)據(jù)庫(不常用)中,您可以編寫:
CREATE TABLE someone.table ( ... )
系統(tǒng)目錄中的所有者名稱將是“某人”,而不是“某人”。如果將所有者名稱括在雙引號中,則它的作用類似于分隔標識符。使用標準SQL,可以在許多地方使用分隔標識符。使用Informix,您可以只在所有者名稱周圍使用它們-在其他上下文中,Informix將單引號和雙引號字符串視為字符串,而不是將單引號字符串和雙引號字符串分隔為分隔標識符。(當然,為了完整起見,有一個環(huán)境變量DELIMIDENT,它可以被設置為任何值,但Y是最安全的,它表明雙引號總是環(huán)繞分隔標識符,單引號總是圍繞字符串。)
請注意,MSSQLServer設法使用方括號中的[分隔標識符]。在我看來,這看起來很奇怪,而且肯定不是SQL標準的一部分。