SQL Server 2005 T-SQL重映射列

时间:2009-09-10 22:36:06

标签: sql sql-server sql-server-2005 tsql

我有一个准备好上线的应用程序,一旦我们从MS Access DB获取数据并将其导入SQL Server 2005.我使用了Migration - Access工具将Access数据库导入SQL Server,但是现在我需要从该表中获取数据并将其放入我们的应用程序将要使用的表中。是否有T-Sql方法插入多行,同时“重新映射”数据?

例如

SELECT ID, FIRST_NAME, LAST_NAME
INTO prod_users (user_id, first_name, last_name)
FROM test_users

我知道当列名相同但

时选择* into
prod_users (column names, ..., ...)

部分是我真正需要工作的部分。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

INSERT和SELECT是神奇的关键词:

insert into new_table (list of columns) select columnA, functionB(), 
(correlated_subquery_C) from table_or_join where critera_expression_is_true

也许您可以通过重新映射更具体地了解您的意思?

根据您的评论,更具体的查询是:

insert into new_table (user_id, firstname, lastname) 
select id, first_name, last_name from old_database..old_table

答案 1 :(得分:1)

我相信SELECT INTO语法用于创建新表。如果要将刚刚导入的表中的数据映射到其他现有表,请尝试使用普通INSERT。例如:

INSERT INTO prod_users (user_id, first_name, last_name)
SELECT ID, FIRST_NAME, LAST_NAME
FROM test_users

从test_users到prod_users的列的映射基于它们列出的顺序,即“prod_users(column_names,...)”中的第一列与“SELECT other_col_names,...”中的第一列匹配。因此,在上面的代码示例中,ID映射到user_id,LAST_NAME映射到last_name,依此类推。

确保每个列表中的列数相同,列类型匹配(或者可以转换为匹配)。请注意,您不必指定任何一个表中的所有列(只要目标表具有未指定列的有效默认值)。

有关详细信息,请参阅INSERT syntax;与您的问题相关的部分是“execute_statement”表达式。