Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Controllare il tipo di parametro di una funzione di partizione in SQL Server (T-SQL)

Se hai una tabella o un indice partizionato in SQL Server e vuoi controllare il tipo di parametro della funzione di partizione, puoi usare sys.partition_parameters vista catalogo di sistema.

Questa vista restituisce una riga per ogni parametro di una funzione di partizione.

Il tipo di parametro deve corrispondere o essere convertibile in modo implicito nel tipo di dati della colonna di partizionamento nella tabella o nell'indice.

Esempio

Ecco un esempio che mostra le colonne restituite da sys.partition_parameters visualizza.

SELECT * FROM sys.partition_parameters;

Risultato:

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

Ho solo una funzione di partizione, quindi viene restituita solo una riga.

Ecco di nuovo il risultato utilizzando l'output verticale (per evitare di dover scorrere lateralmente):

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

Ottieni il nome del tipo

I sys.partition_parameters view in realtà non restituisce il nome del tipo. Restituisce l'ID del tipo. In realtà, restituisce l'ID del tipo sia del tipo di sistema che del tipo definito dall'utente.

Fortunatamente, possiamo usare il TYPE_NAME() funzione per restituire il nome di ciascuno.

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;

Risultato (usando l'output verticale):

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

Restituisci il nome della funzione

Possiamo anche unirci a sys.partition_functions view per restituire il nome della funzione invece del suo 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;

Risultato (usando l'output verticale):

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