es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es mejor utilizar el TIPO DE TABLA PERSONALIZADO como parámetro en lugar de la cláusula SQL “IN” al pasar un gran valor separado por comas?

Tengo un procedimiento almacenado que toma una cadena separada por comas como entrada. A veces, esta cadena puede ser demasiado larga, con aproximadamente más de 8 mil caracteres o más. En esa situación, el rendimiento de la consulta a veces disminuye. Y creo que hay una limitación para la longitud de caracteres dentro de la cláusula IN. Por eso, a veces obtengo errores. Ahora, necesito saber si es mejor usar un TIPO DE TABLA personalizado como parámetro y usar INNER JOIN para encontrar el resultado. Si es así, ¿por qué es mejor? Estos son mis 2 procedimientos almacenados (código mínimo):

CREATE TYPE [dbo].[INTList] AS TABLE(
[ID] [int] NULL
)

Procedimiento 1

CREATE PROCEDURE [report].[GetSKU]
@list [INTList] READONLY,
AS

Seleccionar sk.SKUID,sk.Code SCode,sk.SName
DE SKUs sk
INNER JOIN @list sst EN sst.ID=sk.SKUID

Procedimiento 2

CREATE PROCEDURE [report].[GetSKU]
@parametros varchar(max),
AS
Seleccionar sk.SKUID,sk.Code SCode,sk.SName
DE SKUs sk
DONDE CHARINDEX(‘,’+cast( sk.SKUID as varchar(MAX))+’,’, @parametros) > 0

Ahora, ¿cuál de estos procedimientos es mejor usar?

Nota: Los procedimientos almacenados originales tienen algunos JOIN adicionales.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es generalmente mejor utilizar el primer procedimiento almacenado, el cual utiliza un tipo de tabla personalizado como parámetro y un inner join para encontrar el resultado. Esto se debe a que la cláusula IN tiene una limitación en el número de caracteres que puede aceptar, y el uso de un tipo de tabla personalizado como parámetro permite más flexibilidad en el número de parámetros que se pueden pasar. Además, el uso de un inner join es más eficiente que el uso de CHARINDEX ya que permite una ejecución de consulta más eficiente.

Comments are closed.