2

这个问题与上一个问题有关, Grouping by or iteration through partitions in SQL

我需要支持 SQL Server 2005、2008、2008 R2,不能依赖 Enterprise 或完整版(必须在 SQL Server Express 中工作)。

我想要做的是创建一个用户定义的计算列,它本质上是一个row_number()dense_rank()超过一个 partition by 子句。这需要像索引一样,因为每当向表中添加行时,都会自动生成这个用户定义的列。

我查看了以下 Microsoft 链接,该链接解释了如何基于函数创建列, http: //msdn.microsoft.com/en-us/library/ms186755.aspx。它并没有完全到达那里。

这可能是不可能的,尤其是没有完整版本的 SQL Server。有什么想法吗?

4

1 回答 1

2

分区的主要特点是将单个对象拆分为多个相对独立的数据库对象。分区允许:

  • 立即将分区从一个表切换到另一个表,因为它成为元数据操作,而不是物理副本。
  • 锁定单个分区而不是整个表,从而使多个进程同时独立访问每个分区。
  • 将单个表分布在多个 db 文件中,将每个分区存储在自己的文件中
  • 压缩数据并单独更改每个分区的其他一些属性。

它不能通过任何其他方式来完成。

因此,我认为您正在寻找一种方法来为某个键的每个组合分配一个 ID,该组合由多个列组成。有多种方法可以做到这一点,具体取决于您想要达到的结果:

  • 在多个列上创建索引。它可能是集群的,它可能位于主键列上。它将帮助搜索并使您的数据排序(在聚集索引的情况下)。
  • 使用所有主键列创建单独的表,并为每个组合分配一个唯一键(例如使用IDENTITY属性)。将此键插入主表以用作“分区 ID”。使用触发器或连接自动插入值。

请注意,SQL Server 只能使用一列进行分区。

于 2013-05-24T20:02:43.483 回答