Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Comparación de Cadena de Caracteres dentro de SP

Estas en el tema de Comparación de Cadena de Caracteres dentro de SP en el foro de SQL Server en Foros del Web. Que tal compas por favor si me pueden apoyar dado que estoy tratando de realizar una comparación de cadenas de caracteres pero parece que algo ...
  #1 (permalink)  
Antiguo 02/04/2014, 09:25
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 8 meses
Puntos: 0
Comparación de Cadena de Caracteres dentro de SP

Que tal compas por favor si me pueden apoyar dado que estoy tratando de realizar una comparación de cadenas de caracteres pero parece que algo me está faltando; he tratado de crear el siguiente código pero al parecer le falta algo a la sintaxis

IF
(
(SELECT spaterno + ' ' + smaterno + ' ' + snombre + ' ' FROM DOBLEPER WHERE IdPrincipal=@IdPrincipal) =
(SELECT spaterno + ' ' + smaterno + ' ' + snombre + ' ' FROM DOBLEPER WHERE IdSecundario=@IdSecundario)
)
ELSE
END

Mi tabla tiene la siguiente estructura: (Paterno, Materno, Nombre son del Tipo varchar) como se puede apreciar en la tabla la persona Perez Garcia Jorge tiene 2 códigos Id's lo cual no es correcto por tal motivo realizaremos un proceso a traves de un SP en donde el registro sólo tenga un Id. Esta (Tabla A) es generada por otro query y por tal motivo me filtra solo aquellos registros que tienen 2 códigos Id's. La tabla puede llegar a tener 50 000 registros y no puedo validar por el IdPrincipal y IdSecundario si hacen referencia al mismo registro para los 50 000 registros que tiene mi tabla

(Tabla A)
Paterno - Materno - Nombres - Edad - IdPrincipal - IdSecundario
PEREZ - GARCIA - JORGE - 20 - ABABABABAB - CDCDCDCDCD
QUISPE - LOPEZ - JOSE - 22 - FGFGFGFGFG - KLKLKLKLKL

Por ello antes de que el Store Procedure haga el proceso de unión y me deje el IdPrincipal para cada registro quisiera hacer previamente una comparación dado que si entre los 50 000 registros encuentra un registros donde el IdPrincipal e IdSecundario no hacen referencia a la misma persona; entonces de por culminado el proceso y no haga la unión; porque de lo contrario el Store Procedure tomará los ID's realizará el proceso de unión de registros a los cuales no se deben unir.

Disculpen por lo extenso de mi post pero quería detallarlo para que se comprenda correctamente el problema.

Gracias de antemano por sus sugerencias.
Saludos,
  #2 (permalink)  
Antiguo 02/04/2014, 09:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparación de Cadena de Caracteres dentro de SP

a ver por partes, 50, 000 registros no es nada para sql server digo hablaras de un millon de registros entonces si te diria toma otra opcion y otra cosa, que necesitas? podrias explicarte con peras y manzanas?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/04/2014, 10:18
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Comparación de Cadena de Caracteres dentro de SP

Actualmente tengo un Store Procedure en el cual ingreso el parámetro de la tabla para que realice el proceso de uniones de registros sobre esa tabla a su vez trabaja con un cursor para que haga el recorrido en toda la tabla; registro por registro. El SP como tal trabaja sin errores; el SP que realmente hace el trabajo de la unión se llama "sp_UnirPersonas"
Ahora el SP va a unir todos los registros que vea en la tabla; pero quisiera que aparte de sólo unir los registros que figuran en la tabla; también realice una validación previa. Esa validación previa sería comparar la cadena de caracteres (Paterno-Materno-Nombre) del IdPrincipal y IdSecundario respectivamente si las cadenas realmente coinciden que efectue entonces el SP "sp_UnirPersonas" con seguridad para la unión respectiva caso contrario que aborte el proceso y ya no continue. Esto lo digo porque no tengo la certeza de que mi tabla entre sus 50 000 registros por ahi quizas no se filtró correctamente un registro y quizas el IdPrincipal e IdSecundario no corresponden a la misma personapor tanto si detecta eso que dé por terminado el proceso de unión ya que por el contrario si no pongo esa validación ... el SP de igual forma realizaría la unión ya que sólo toma los Id's respectivamente de la Tabla y continua el proceso.

Adjunto el query que estoy utilizando; las partes comentadas son las que he adicionado para el tema de comparación de cadenas; por lo demas el query trabaja OK.


Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[ProcesarDupli]  
  2. AS     
  3.         DECLARE @sPaterno VARCHAR(40),
  4.         @sMaterno VARCHAR(40),
  5.         @sNombre VARCHAR(40),
  6.         @sSexo CHAR(1),
  7.         @dFechaNacimiento datetime,
  8.         @sIdPaisNacionalidad CHAR(3),
  9.         @IdPrincipal uniqueidentifier,
  10.         @IdSecundario uniqueidentifier,
  11.         @cnt INT
  12.                
  13.             BEGIN
  14.                 DECLARE @nIdOperador INT,
  15.                 @nIdSesion INT
  16.  
  17.                 SET @nIdOperador = 1
  18.                 SET @nIdSesion  = 1
  19.  
  20.  
  21.                 DECLARE registrosduplicados cursor LOCAL static FOR
  22.                 SELECT * FROM DOBLE
  23.  
  24.                 OPEN registrosduplicados
  25.  
  26.                 Fetch NEXT FROM registrosduplicados
  27.                 INTO @sPaterno, @sMaterno, @sNombre, @sSexo,
  28.                 @dFechaNacimiento, @sIdPaisNacionalidad, @IdPrincipal, @IdSecundario
  29.            
  30.  
  31.                 While @@fetch_status=0
  32.                     BEGIN
  33. -- CAMBIO COMPROBACION      IF  
  34. -- CAMBIO COMPROBACION          (  
  35. -- CAMBIO COMPROBACION          (SELECT spaterno + ' ' + smaterno + ' ' + snombre + ' ' FROM DOBLE WHERE IdPrincipal=@IdPrincipal) =
  36. -- CAMBIO COMPROBACION          (SELECT spaterno + ' ' + smaterno + ' ' + snombre + ' ' FROM DOBLE WHERE IdSecundario=@IdSecundario)
  37.                         EXEC sp_UnirPersonas @IdPrincipal, @IdSecundario, @nIdOperador, @nIdSesion -- Este SP realmente realiza el proceso de Unión.
  38.  
  39.                         SET rowcount 0
  40.  
  41.                         Fetch NEXT FROM registrosduplicados
  42.                         INTO @sPaterno, @sMaterno, @sNombre, @sSexo,
  43.                         @dFechaNacimiento, @sIdPaisNacionalidad, @IdPrincipal, @IdSecundario
  44. -- CAMBIO COMPROBACION          )              
  45. -- CAMBIO COMPROBACION      ELSE       
  46. -- CAMBIO COMPROBACION       END
  47.                     END
  48.  
  49.                 Close registrosduplicados
  50.                 Deallocate registrosduplicados
  51.  
  52.                 print 'EJECUCIÓN SATISFACTORIA'
  53.             END
[/CODE]

Saludos,

Última edición por gnzsoloyo; 02/04/2014 a las 10:20 Razón: Usar Highlight "SQL", por favor.
  #4 (permalink)  
Antiguo 02/04/2014, 10:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparación de Cadena de Caracteres dentro de SP

cursor?? creo que puedes hacer lo que necesitas sin un cursor haciendo esto:



Código SQL:
Ver original
  1. SELECT
  2. t1.nombre,t1.apa,t1.ama
  3.  FROM tabla AS t1
  4. LEFT JOIN tabla2 AS t2 ON (t1.nombre=t2.nombre AND t1.apa=t2.apa AND t1.ama=t2.ama)
  5. WHERE t1.id<>t2.id

este query te regresaria los registros en donde los nombres son iguales y tienen id's diferentes

ahora para saber cuales son los que tienen un id unico

solo harias

Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE nombre+apa+ama NOT IN
  2. (
  3. SELECT
  4. t1.nombre+t1.apa+t1.ama
  5.  FROM tabla AS t1
  6. LEFT JOIN tabla2 AS t2 ON (t1.nombre=t2.nombre AND t1.apa=t2.apa AND t1.ama=t2.ama)
  7. WHERE t1.id<>t2.id
  8. )
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 03/04/2014, 11:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Comparación de Cadena de Caracteres dentro de SP

Creo que el tema ya ha sido "trillado" hasta el cansancio, ¿te gusta matar a tu servidor de base de datos?, simple, USA CURSORES
__________________
MCTS Isaias Islas

Etiquetas: cadena, caracteres, query, registros, select, siguiente, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:09.