我希望创建一个临时表,在编译报告时用作中间表。
对于一些背景知识,我将VB 6应用程序移植到.net
要创建表格,我可以使用...
SELECT TOP 0 * INTO #temp_copy FROM temp;
这会创建一个空的temp副本,但它不会创建主键
有没有办法创建临时表加上约束?
我之后应该创建约束吗?
或者我最好只使用create table创建表,我不想这样做,因为表中有45列,它会填充程序中有很多不必要的错误。
该表是必需的,因为很多人可能同时生成报告,所以我不能使用单个中间表
答案 0 :(得分:7)
你真的需要主键吗?如果您正在过滤并仅选择报告所需的数据,那么您是否还必须访问临时表中的每一行?
答案 1 :(得分:7)
按照设计,SELECT INTO不会带来约束(PK,FK,Unique),默认值,检查等。这是因为SELECT INTO实际上可以同时从多个表中拉出(通过FROM子句中的连接)。由于SELECT INTO从您指定的表中创建一个新表,因此SQL无法确定您要保留哪些约束,以及您不想保留哪些约束。
您可以编写一个过程/脚本来自动创建约束,但是为了获得最小的增益,可能需要付出太多努力。
答案 2 :(得分:6)
你必须做一个或另一个:
我也会这样做而不是TOP 0
SELECT * INTO #temp_copy FROM temp WHERE 1 = 0;