Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vérifier le type de paramètre d'une fonction de partition dans SQL Server (T-SQL)

Si vous avez une table ou un index partitionné dans SQL Server et que vous souhaitez vérifier le type de paramètre de la fonction de partition, vous pouvez utiliser le sys.partition_parameters vue du catalogue système.

Cette vue renvoie une ligne pour chaque paramètre d'une fonction de partition.

Le type de paramètre doit correspondre ou être implicitement convertible en type de données de la colonne de partitionnement dans la table ou l'index.

Exemple

Voici un exemple qui montre les colonnes renvoyées par le sys.partition_parameters vue.

SELECT * FROM sys.partition_parameters;

Résultat :

+---------------+----------------+------------------+--------------+-------------+---------+------------------+----------------+
| function_id   | parameter_id   | system_type_id   | max_length   | precision   | scale   | collation_name   | user_type_id   |
|---------------+----------------+------------------+--------------+-------------+---------+------------------+----------------|
| 65542         | 1              | 56               | 4            | 10          | 0       | NULL             | 56             |
+---------------+----------------+------------------+--------------+-------------+---------+------------------+----------------+

Je n'ai qu'une seule fonction de partition, et donc une seule ligne est renvoyée.

Voici à nouveau le résultat en utilisant la sortie verticale (pour vous éviter d'avoir à faire défiler latéralement) :

function_id    | 65542
parameter_id   | 1
system_type_id | 56
max_length     | 4
precision      | 10
scale          | 0
collation_name | NULL
user_type_id   | 56

Obtenir le nom du type

Les sys.partition_parameters view ne renvoie pas réellement le nom du type. Il renvoie l'ID de type. En fait, il renvoie l'ID de type du type système et du type défini par l'utilisateur.

Heureusement, vous pouvez utiliser le TYPE_NAME() fonction pour renvoyer le nom de chacun.

SELECT
    function_id,
    parameter_id,
    TYPE_NAME(system_type_id) AS [System Type],
    max_length,
    precision,
    scale,
    collation_name,
    TYPE_NAME(user_type_id) AS [User Type]
FROM sys.partition_parameters;

Résultat (en utilisant la sortie verticale) :

function_id    | 65542
parameter_id   | 1
System Type    | int
max_length     | 4
precision      | 10
scale          | 0
collation_name | NULL
User Type      | int

Renvoyer le nom de la fonction

Nous pouvons également joindre les sys.partition_functions view pour renvoyer le nom de la fonction au lieu de son ID.

SELECT
    pf.name,
    pp.parameter_id,
    TYPE_NAME(pp.system_type_id) AS [System Type],
    pp.max_length,
    pp.precision,
    pp.scale,
    pp.collation_name,
    TYPE_NAME(pp.user_type_id) AS [User Type]
FROM sys.partition_parameters pp
INNER JOIN sys.partition_functions pf
ON pf.function_id = pp.function_id;

Résultat (en utilisant la sortie verticale) :

name           | MoviesPartitionFunction
parameter_id   | 1
System Type    | int
max_length     | 4
precision      | 10
scale          | 0
collation_name | NULL
User Type      | int