确定 SQL Server 表的分区号

And*_*osa 3 sql t-sql sql-server

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

我的场景是多个表使用相同的策略进行分区,使用循环将数据发送到一个分区,然后截断下一个(模运算),但现在这个策略将在我们的系统上进行配置:

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

问题在于,如果模运算的参数与用于分区初始表的参数不匹配,则用户可能会在之后的配置部署上搞砸,并在不同的分区上进行 TRUNCATE。我想检测这种情况,并避免它。

所以这样的事情将是理想的:

IF {tableName}.partitions == {expectedPartitions} THEN
   TRUNCATE {tableName} WITH (PARTITIONS({partitionToRemove}))
END
Run Code Online (Sandbox Code Playgroud)

有没有办法用纯(T)SQL 做到这一点?

Gor*_*off 5

你可以计算它们:

select count(*)
from sys.partitions
where object_id = object_id(@YourTableNameHere)
Run Code Online (Sandbox Code Playgroud)

这是一个标量子查询,可以在if.