确定SQL Server表的分区号

时间:2018-08-23 17:28:52

标签: sql sql-server tsql

我试图在运行时确定SQL Server上特定表具有的分区数。我知道如何查询 sys.partitions 表以手动检查它,但是我需要在运行时执行此操作(一个简单的IF语句就足够了)。

我遇到的情况是,使用相同的策略对多个表进行分区,使用循环机制将数据发送到分区,然后截断下一个(模运算),但是现在该策略可以在我们的系统上配置:

  1. 用户将能够确定所需的分区。
  2. 如果该策略不存在该表,系统将创建该表。
  3. 在后台执行截断操作将清除“最早的”分区(即当前分区右侧的分区)。

问题在于,此后用户可能会搞砸他们的配置部署,如果取模操作的参数与用于分区初始表的参数不匹配,则用户可能会在其他分区上截断。 我想检测这种情况,并避免发生这种情况。

因此,这样的方法将是理想的:

IF {tableName}.partitions == {expectedPartitions} THEN
   TRUNCATE {tableName} WITH (PARTITIONS({partitionToRemove}))
END

用纯(T)SQL做到这一点的任何方法吗?

1 个答案:

答案 0 :(得分:0)

您可以计算它们:

select count(*)
from sys.partitions
where object_id = object_id(@YourTableNameHere)

这是可以在if中使用的标量子查询。