sql-server - 是否可以编写包含一对多关系的数据库 View ?

标签 sql-server database database-design sql-server-2008 views

所以我不一定说如果可能的话这甚至是个好主意,因为 View 的架构会非常不稳定,但是有没有什么方法可以在单个 View 中表示多对多关系?

例如,假设我有一个客户可以在数据库中拥有任意数量的地址。有没有什么方法可以列出每个地址的每一列,也许用数字作为别名的一部分(例如,客户 ID、姓名、Address_Street_1、Address_Street_2 等列)?

谢谢!

最佳答案

不尽然 - 您确实在做一个动态枢轴。可以使用 OPENROWSET 来获取动态生成的查询,但是这是否可取,如果没有看到更多关于业务案例,很难说。

第一个make a stored proc which does the dynamic pivot就像我在 StackExchange Data Explorer 上所做的那样。

基本上,您生成构建列列表的动态 SQL。这只能在存储过程中真正完成。这适用于应用程序调用。

但是如果您想在许多不同的连接或临时查询中重复使用它怎么办?

然后,看看this article : "使用 SQL Servers OPENROWSET 打破规则"

您现在可以通过循环回服务器调用存储过程,然后将结果放入行集中 - 这可以在 View 中!

已故的 Ken Henderson 在 his excellent book 中有一些很好的例子:“SQL Server 存储过程、XML 和 HTML 大师指南”(您一定会喜欢封面上的小“Covers .NET!”,它很好地捕捉了 2002 年的时代精神!)。

他只介绍了环回部分(带有 View 和用户定义的函数),不太冗长的 PIVOT 语法直到 2005 年才可用,但是 PIVOT 也可以使用 CASE 语句生成,如 a characteristic function .

显然,这项技术有一些注意事项(我什至不能在我们的生产服务器上执行此操作)。

关于sql-server - 是否可以编写包含一对多关系的数据库 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3055137/

相关文章:

mysql - 与同一实体的多个一对多关系

php - 如何在PHP Mysql中实现只有一级的深度评论系统

sql - 行号重置

php - 选择多个条件

sql-server - T-SQL : check if variable is null

php - Laravel 没有将所有数据插入数据库

php - 将 codeigniter 2.0 与 Datamapper 一起使用时类名冲突?

php - 如何添加数据库中的每条最后记录?例如。 1 += 1

sql-server - SQL Server - 重叠数据的累积总和 - 获取总和达到给定值的日期

sql - 数据库设计允许存储来自可能改变的外部关系的数据