SQL临时表和稀疏列问题

时间:2015-06-27 13:48:12

标签: sql sql-server

我也在另一个论坛上问过这个问题,不知道最好发布这个帖子。以为我也会在这里试试。

我最近转换了一个包含许多列的表,这些列现在使用稀疏列。但是我现在发现我的很多查询都没有用。

这似乎是因为我在查询中使用了很多#Temp表以及SELECT ... INTO ...方法将数据导入临时表。

这在以前工作得很好,但是稀疏列没有进入#Temp表。

以下是以前工作正常的例子: -

Select *  
INTO #temptable1
from Client

(这显然只是抓住了Client表中的所有内容)

我尝试了以下但没有成功(知道我现在需要指定列名)

Select ClientId, Val1, Val2, Val3, Val4, Val5, Val6
INTO #temptable1
from Client

Val3,Val4,Val6和Val6是稀疏列。查询运行正常,但是当我尝试从#temptable1中选择任何稀疏列时,它只是说它们不存在。

阅读后。似乎我不能使用SELECT ... INTO ...但是我还没有找到任何其他替代方法可以将我的代码转换为?

我有很多使用此方法的非常复杂的查询,我正在寻找可以将它们全部转换为的内容。

非常感谢任何帮助或建议。

提前致谢。

1 个答案:

答案 0 :(得分:3)

SQL Server documentation很清楚,select into中没有显示稀疏列:

  

稀疏列是存储层的属性,而不是   逻辑表。因此,SELECT ... INTO语句不会复制   将稀疏列属性放入新表中。

因此,您的列将转换为常规列。我希望会出现问题,因为列数太多或者记录对于SQL Server页面来说太大了。

也许常见的表表达式可以解决您的问题。根据我的经验,临时表很有用,但是过度使用。