SQL Server从另一个表创建临时表

时间:2010-02-03 06:24:37

标签: sql sql-server tsql

我希望创建一个临时表,在编译报告时用作中间表。

对于一些背景知识,我将VB 6应用程序移植到.net

要创建表格,我可以使用...

SELECT TOP 0 * INTO #temp_copy FROM temp;

这会创建一个空的temp副本,但它不会创建主键

有没有办法创建临时表加上约束?

我之后应该创建约束吗?

或者我最好只使用create table创建表,我不想这样做,因为表中有45列,它会填充程序中有很多不必要的错误。

该表是必需的,因为很多人可能同时生成报告,所以我不能使用单个中间表

3 个答案:

答案 0 :(得分:7)

你真的需要主键吗?如果您正在过滤并仅选择报告所需的数据,那么您是否还必须访问临时表中的每一行?

答案 1 :(得分:7)

按照设计,SELECT INTO不会带来约束(PK,FK,Unique),默认值,检查等。这是因为SELECT INTO实际上可以同时从多个表中拉出(通过FROM子句中的连接)。由于SELECT INTO从您指定的表中创建一个新表,因此SQL无法确定您要保留哪些约束,以及您不想保留哪些约束。

您可以编写一个过程/脚本来自动创建约束,但是为了获得最小的增益,可能需要付出太多努力。

答案 2 :(得分:6)

你必须做一个或另一个:

  • 之后添加PK /索引
  • 使用约束显式声明临时表。

我也会这样做而不是TOP 0

SELECT * INTO #temp_copy FROM temp WHERE 1 = 0;