关于“INSERT”命令的用法
把A表的一个字段变量,可以用“INSERT”命令赋值到B表的尾部吗?如果可以,我想要它的详细用法。
INSERT - SQL 命令详解
INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])]
VALUES (eExpression1 [, eExpression2, ...])
INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR | FROM NAME ObjectName
INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])]
SELECT SELECTClauses [UNION UnionClause SELECT SELECTClauses ...]
参数
INSERT INTO dbf_Name
指定要添加新记录的表名。dbf_Name 可以包含路径,也可以是一个名称表达式。
[( FieldName1 [, FieldName2 [,?...]])]
指定要插入值的新记录中的字段名。
VALUES (eExpression1 [, eExpression2 [,?...]])
指定插入新记录中的字段值。若省略字段名,则必须用表结构定义的顺序指定字段值。若 eExpression 是一个字段名,则其必须包含表别名。若 SET NULL 为 ON,则 INSERT 试图在任何 VALUES 子句中没有指定的字段中插入空白值(null)。
FROM Source
指定插入的数据来自数组、内存变量、还是 Visual FoxPro 对象。下面为 Source 列出了可用项:
ARRAY
ArrayName 指定数组,数组的数据被插入到新记录。 从第一个元素开始,数组元素的内容被插入到记录的相应字段。第一个数组元素的内容被插入到新记录的第一个字段;第二个数组元素的内容被插入到第二个字段,以此类推。 当包含 FROM ARRAY 子句时,Visual FoxPro 忽略任何字段默认值。
MEMVAR
MEMVAR 指定将内存变量的内容插入到与变量同名的字段中。若不存在与字段同名的内存变量,则该字段为空(empty)。
NAME *NEW ObjectName 指定一个有效的 Visual FoxPro 对象,其属性名与表中的字段名匹配,从而使您可以插入包含对象属性值的新记录。可以指定任何有效的 Visual FoxPro 对象,您可以用 SCATTER...NAME 命令创建它。更多的信息,请参见 SCATTER 命令。 若不存在与对象属性相匹配的字段,则 Visual FoxPro 忽略此字段,并且像使用 APPEND BLANK 命令一样将其置为空。 若对象属性的类型与表中字段类型不匹配,则 Visual FoxPro 产生一条数据类型不匹配的消息。 注意:
当指定的对象派生于 Visual FoxPro 类时,应小心使用,因为许多固有属性可能与字段的类型不同,而且不能改变。
若表中存在自动增量字段,除非为数据工作期设置 SET AUTOINCERROR 命令为 OFF,否则不能存在匹配自动增量字段的对象属性。否则,Visual FoxPro 将产生一条错误。若在 SET AUTOINCERROR 设置为 ON 时使用 SCATTER...NAME 创建对象,则可以使用 REMOVEPROPERTY( ) 函数移去任何自动增量属性,从而避免产生错误。更多的信息,请参见 SET AUTOINCERROR 命令 和REMOVEPROPERTY( ) 函数。
数组、内存变量、或对象在 Visual FoxPro OLE DB 提供程序中不被支持。
SELECT SELECTClauses [UNION UnionClause SELECT SELECTClauses?...]
为了插入另一个表或临时表,使用一条或多条 SQL SELECT 语句,从一张表或临时表中获取数据。但是,SELECT 语句不能包含任何非 SQL 语句,比如:INTO、TO、和 PREFERENCE 子句;NOFILTER、READWRITE、NOCONSOLE、PLAIN、和 NOWAIT 选项。想要第一条 SQL SELECT 语句结合另外的 SQL SELECT 语句,可以使用 UNION 子句。有关包含 UNION 子句的 SQL SELECT 命令的语法,请参见 SELECT - SQL 命令。 注意:*NEW
当使用包含 SELECT 语句的 SQL INSERT 命令时,应确保插入的数据与被插入的表中的数据类型相同。Visual FoxPro 试图将用 SQL SELECT 创建的临时表中的数据类型,转换为插入数据的对应表或临时表的列的数据类型。如果插入的数据不兼容,则可能丢失数据的精度,或日期型数据转换为字符型数据,等等。
说明
如果指定表打开了,则 SQL INSERT 添加新记录到表中。如果表在非当前工作区中打开,则添加记录后也不会选择该工作区;当前工作区一直保持选中。
如果指定表没有打开,则 Visual FoxPro 在新工作区中打开它,并添加新记录到表中。新工作区不被选中;当前工作区一直保持选中。
执行 SQL INSERT 命令期间,当前工作区变为要插入新记录的工作区。换句话说,执行 SQL INSERT 命令时,不管发出命令之前的工作区是哪个,执行期间的工作区都是要插入新记录的表所在的工作区。
执行 INSERT 命令之后,Visual FoxPro 将记录指针定位在新记录上。
若包含 SQL SELECT 语句,则 Visual FoxPro 用插入的行数更新 _TALLY 系统内存变量。更多的信息,请参见 _TALLY 系统内存变量。
示例 1
下例打开 Employee 表,并添加一条记录。
USE employee
INSERT INTO employee (emp_no, fname, lname, officeno) ;
VALUES (3022, "John", "Smith", 2101)
示例 2
下例用 USE 命令打开数据库 TestData.dbc 中的 Customer 表,然后用 SCATTER 命令将当前记录的内容复制到内存变量中。用 COPY STRUCTURE 将表结构复制到名为 Cust2 的新表。
用 INSERT 命令从内存变量中插入新记录到 Cust2 表。用 SELECT 命令从 Cust2 表重新中获得数据,然后用 BROWSE 显示新记录。
清理,用没有指定表名的 USE 命令关闭当前工作区中的表,然后用 DELETE 删除 Cust2。
CLOSE DATABASES
CLEAR
OPEN DATABASE (HOME(2) + 'Data\TestData')
USE Customer
SCATTER MEMVAR
COPY STRUCTURE TO Cust2
INSERT INTO Cust2 FROM MEMVAR
SELECT CUST2
BROWSE
USE
DELETE FILE cust2.dbf
示例 3
下例用 SELECT 语句返回的 Orders 表的结果,将数据插入到 OrdersArchive 表。
复制代码
INSERT INTO OrdersArchive (order_id, order_date, ship_name) ;
SELECT order_id, order_date, ship_name FROM Orders ;
WHERE order_date >= (DATE()-30)