我完全熟悉链接中执行动态数据透视查询的以下方法。是否有替代方法可以执行动态数据透视而不将查询存储为字符串并在其中插入列字符串?
http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx
最佳答案
简短回答: 否。
长答案:
好吧,这仍然是不。但我会尽力解释原因。从今天开始,当您运行查询时,数据库引擎需要了解查询将返回的结果集结构(列数、列名、数据类型等)。因此,当您从数据库中查询数据时,您必须定义结果集的结构。想一想:您是否曾经运行过事先不知道结果集结构的查询?
即使您执行select *
,这也适用,这只是一种语法糖。最后,返回结构是“此类表中的所有列”。
通过组装字符串,您可以在请求结果集之前动态生成所需的结构。这就是它起作用的原因。
最后,您应该知道,动态组装字符串可以理论上和潜在地(尽管不太可能)为您提供包含无限列的结果集。当然,这是不可能的,它会失败,但我相信你明白其中的含义。
更新
我发现了这一点,这进一步说明了它不起作用的原因。
Here :
SSIS relies on knowing the metadata of the dataflow in advance and a dynamic pivot (which is what you are after) is not compatible with that.
我会继续寻找并添加到这里。
关于sql - 不将查询存储为字符串的动态数据透视查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831364/