Ver Mensaje Individual
  #11 (permalink)  
Antiguo 10/04/2006, 10:45
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 6 meses
Puntos: 4
Como puntilla final voy a poner el procedimiento completo, que por cierto estaba liado también en otro tema del foro de SQL Server. Más o menos funciona como pretendía, aunque eso sí, no estoy nada seguro del rendimiento. En fin, allá va:

Código:
ALTER PROCEDURE PA_BuscaTaxa
(
	@nome varchar(250),
	@act bit = 1,
	@cientifico bit = 1,
	@usuario varchar(4) = '%',
	@aut varchar(250) = '%',
	@inicial bit = 0
)
AS
BEGIN
	DECLARE @tabla TABLE (ID int, Nombre nvarchar(250),Autor nvarchar(250),Usuario  varchar(4))
	IF @cientifico = 1
	BEGIN
		INSERT INTO @tabla SELECT 
			(CASE WHEN tax.SinonimoDe IS NOT NULL THEN tax.SinonimoDe ELSE tax.ID END) AS "ID",
			(CASE
				WHEN tax.IDTipo = 14 THEN RTRIM(padre2.Nombre)+' '+RTRIM(padre1.Nombre)+' subsp. '+RTRIM(tax.Nombre)
				WHEN tax.IDTipo = 13 THEN RTRIM(padre1.Nombre)+' '+RTRIM(tax.Nombre)
				WHEN tax.IDTipo < 13 THEN RTRIM(tax.Nombre)
			END)+(CASE WHEN tax.SinonimoDe IS NOT NULL THEN ' *' ELSE '' END) AS "Nombre",
			Autor = (CASE WHEN tax.Autor IS NULL THEN ' ' ELSE tax.Autor END),
			Usuario = (CASE WHEN tax.Usuario IS NULL THEN ' ' ELSE CONVERT(varchar(4),tax.Usuario) END)
			FROM tabTaxa as tax
			INNER JOIN
				tabTaxa AS padre1 ON padre1.ID LIKE (CASE WHEN tax.IDPadre IS NOT NULL THEN tax.IDPadre ELSE NULL END)
			LEFT JOIN 
				tabTaxa AS padre2 ON padre2.ID LIKE (CASE WHEN padre1.IDPadre IS NOT NULL THEN padre1.IDPadre ELSE NULL END)
			WHERE 
				tax.Activado = @act
	END
	ELSE
	BEGIN
		INSERT INTO @tabla SELECT
			vul.IDTaxa AS "ID",
			vul.Nombre,
			Autor = (CASE WHEN tax.Autor IS NULL THEN ' ' ELSE tax.Autor END),
			Usuario = (CASE WHEN tax.Usuario IS NULL THEN ' ' ELSE CONVERT(varchar(4),tax.Usuario) END)
			FROM nombresVulgares AS vul
			INNER JOIN
				tabTaxa AS tax ON tax.ID = vul.IDTaxa
			WHERE
				vul.Nombre LIKE '%'+@nome+'%'
				AND
				tax.Activado = @act
	END

	SELECT * 
	FROM @tabla	
	WHERE 	
		Nombre LIKE  (CASE WHEN @inicial = 1 THEN SUBSTRING(@nome,1,1)+'%' ELSE '%'+@nome+'%'  END)
		AND 
		RTRIM(Autor) LIKE @aut
		AND 
		RTRIM(Usuario) LIKE @usuario
END
Como ya os he comentado sigo peleado con una parte del procedmiento, ya que no me devuelve los valores cuando IDPadre es nulo. Eso está en este tema.

Un saludo y gracias de nuevo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!