我也在另一个论坛上问过这个问题,不知道最好发布这个帖子。以为我也会在这里试试。
我最近转换了一个包含许多列的表,这些列现在使用稀疏列。但是我现在发现我的很多查询都没有用。
这似乎是因为我在查询中使用了很多#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 ...但是我还没有找到任何其他替代方法可以将我的代码转换为?
我有很多使用此方法的非常复杂的查询,我正在寻找可以将它们全部转换为的内容。
非常感谢任何帮助或建议。
提前致谢。
答案 0 :(得分:3)
SQL Server documentation很清楚,select into
中没有显示稀疏列:
稀疏列是存储层的属性,而不是 逻辑表。因此,SELECT ... INTO语句不会复制 将稀疏列属性放入新表中。
因此,您的列将转换为常规列。我希望会出现问题,因为列数太多或者记录对于SQL Server页面来说太大了。
也许常见的表表达式可以解决您的问题。根据我的经验,临时表很有用,但是过度使用。