使用WHERE导出SELECT作为INSERT

时间:2013-11-28 11:38:53

标签: sql-server sql-server-2005

我需要从insert的结果中创建一组select个语句。

我在SO上发现了类似的问题,但据我所知,他们都考虑对表进行完全导出,但我需要运行where条件的特定查询,比如说

select * from T where open_time > '2013-11-01 00:00:00'

UPD :我需要将脚本作为输出,因为稍后我会将这些行插入到单独的数据库中。

4 个答案:

答案 0 :(得分:1)

INSERT INTO Destination_Table (Column1, Column2, Column3, .....)
SELECT Column1, Column2, Column3, ..
FROM TABLE_Name   --<-- Source Table Name
WHERE Condition...    --<--- any conditions or Filters here

INSERTSELECT语句中的列和数据类型的数量应匹配

如果目标表不存在,您可以通过执行此操作来创建表

动态创建表格

SELECT Column1, Column2, Column3, ..     INTO   New_Table_Name 
FROM TABLE_Name   --<-- Source Table Name
WHERE Condition...    --<--- any conditions or Filters here

* 警告* 如果名称New_Table_Name的表已经存在,那么您将不得不使用INSERT INTO方法,因为在这种情况下使用SELECT INTO语法将引发错误

答案 1 :(得分:1)

您可以使用动态SQL:

declare @sql nvarchar(max) = ''

select @sql = @sql + 'insert into table1(column1, column2) values (' 
    + T.column1 + ',' + T.column2 + '); ' 
from T where open_time > '2013-11-01 00:00:00'

print (@sql)

这将生成您可以复制并稍后使用的插入语句。

您可能需要修改它,具体取决于您可能需要引号的数据类型以及从T返回的列的格式。

答案 2 :(得分:0)

选择可以帮助你

SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM Person.Contact
WHERE Phone LIKE '492%'

答案 3 :(得分:0)

您可以使用表格的列替换列名称。

INSERT INTO NEW_T (Column1, Column2, Column2, ...)
SELECT Column1, Column2, Column3, ...
FROM T
WHERE open_time > '2013-11-01 00:00:00'

我假设您已经创建了新表 NEW_T