sql >> Base de Datos >  >> RDS >> Sqlserver

Comprobar el tipo de parámetro de una función de partición en SQL Server (T-SQL)

Si tiene una tabla o índice particionado en SQL Server y desea verificar el tipo de parámetro de la función de partición, puede usar sys.partition_parameters vista del catálogo del sistema.

Esta vista devuelve una fila para cada parámetro de una función de partición.

El tipo de parámetro debe coincidir o ser implícitamente convertible al tipo de datos de la columna de partición en la tabla o índice.

Ejemplo

Aquí hay un ejemplo que muestra las columnas devueltas por sys.partition_parameters ver.

SELECT * FROM sys.partition_parameters;

Resultado:

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

Solo tengo una función de partición, por lo que solo se devuelve una fila.

Aquí está el resultado nuevamente usando la salida vertical (para evitar tener que desplazarse hacia los lados):

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

Obtener el nombre del tipo

Los sys.partition_parameters view en realidad no devuelve el nombre del tipo. Devuelve el ID de tipo. En realidad, devuelve el ID de tipo tanto del tipo de sistema como del tipo definido por el usuario.

Afortunadamente, podemos usar el TYPE_NAME() función para devolver el nombre de cada uno.

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;

Resultado (usando salida vertical):

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

Devolver el nombre de la función

También podemos unirnos a sys.partition_functions view para devolver el nombre de la función en lugar de su 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;

Resultado (usando salida vertical):

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