从用户名过滤的SQL Server中提取数据

时间:2015-10-20 04:35:59

标签: sql sql-server sql-server-2008

我的数据库中有一个巨大的表tableA。我必须通过tableA提取这个userA中的条目。

我的目标是将这些数据附加到我们提供构建的另一台服务器上。

查询

select * 
from tableA 
where name = 'userA'

将给出select语句。但是如何将insert语句作为脚本获取,以便在新数据库中运行时,所有条目都应插入到新表中?

总而言之,我想提取脚本并将其作为脚本提供给我所有记录的构建人员。

2 个答案:

答案 0 :(得分:0)

您是否需要从表A插入新表(TableB)的脚本? 如果表位于同一服务器中,则只需要:

Insert into TableB (Col1, Col2, Col3)
select Col1, Col2, Col3 from TableA

如果表位于不同的服务器中。首先,您必须在服务器之间和执行脚本

之后创建链接服务器
Insert into Server2.TableB (Col1, Col2, Col3)
select Col1, Col2, Col3 from Server1.TableA

答案 1 :(得分:0)

作为一个起点,如果您没有包含NULL值的列,则可以尝试以下查询序列:

#get fields in a mysql variable

select   GROUP_CONCAT(CONCAT('`', `column_name`, '`')) 
from `information_schema`.`COLUMNS` where TABLE_NAME='tableA' into @fields;

#get the query which will generate the insert command in a variable

select CONCAT("SELECT CONCAT(\'INSERT INTO tableA(",@fields,
")VALUES(\\\'\',CONCAT_WS(\"\',\'\",",@fields,
"),\"\');\") as `INSERT COMMAND` from `tableA` where `name`='userA'")
into @generateInsertCommand;

#execute the query which will generate insert command

PREPARE stmt FROM @generateInsertCommand;
EXECUTE stmt;

它应该产生这样的东西:

INSERT INTO tableA(`id`,`date1`,`int1`,`name`)VALUES('4','2015-10-21','127','userA');
INSERT INTO tableA(`id`,`date1`,`int1`,`name`)VALUES('5','2015-10-20','327','userA');