sql - 不将查询存储为字符串的动态数据透视查询

标签 sql sql-server sql-server-2005 sql-server-2008 pivot

我完全熟悉链接中执行动态数据透视查询的以下方法。是否有替代方法可以执行动态数据透视而不将查询存储为字符串并在其中插入列字符串?

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/

相关文章:

mysql - 复杂的 MySQL 左连接查询

SQL Server 2005查询多个Access数据库?

mysql - 如何在 sql 查询中替换 UNION

c# - 当我尝试通过存储过程插入空值时出现 SqlException

sql - 无法将 varchar 转换为 float

sql - 如何参数化删除表的 T-SQL 存储过程?

sql - 为什么 Django 显式地在唯一字段上创建索引

SQL Server 填充缺失记录

sql-server-2005 - SQL Server 列之间的逗号分隔值

sql-server-2005 - 检测是否安装了 SQL Server Compact Edition 3.5 SP2 x64?