如果要从SQL Server中的现有表创建新表,可以执行以下操作

SELECT * into Table2
from Table1
WHERE 1=2


where子句的意义是什么?我尝试了没有where子句的情况,并且运行良好。我在Internet上的许多示例中都已经看到了where子句,但是没有看到为什么需要它的原因。

#1 楼

在该WHERE 1=2查询中放入SELECT INTO子句的原因是创建不包含数据的现有表的字段副本。

如果这样做,则:

select *
into Table2
from Table1


Table2将与Table1完全相同,包括数据行。但是,如果您不希望Table1中包含数据,而只想要表结构,则可以放置WHERE子句来过滤掉所有数据。

BOL SELECT INTO参考报价:


SELECT…INTO在默认文件组中创建一个新表,并将查询中的结果行插入到表中。


如果您的WHERE子句没有结果行,将不会有任何行插入新表:因此,您最终会得到没有数据的原始表的重复架构(在这种情况下,这将是所需的结果)。

相同的效果可以使用TOP (0)来实现,例如:

select top (0) *
into Table2
from Table1;


注意:SELECT INTO不会复制源表的索引,约束,触发器或分区架构。