order by ..... en procedimientos almacenados?

08/07/2004 - 18:16 por Cesar Correa | Informe spam
Buenos dias a todos,
ayudenme por favor, no les quito tiempo, solo queria saber
si la clausula SQL "ordey by (tabla.campo) " funciona en
un select que tengo en procedimiento almacenado?
te muestro el codigo:

CREATE PROCEDURE finalRes AS
SELECT '<OPTION selected id=' + '"'
+ 'optCiudadesNinguno'+ '"' + ' ' + 'name=' + '"'
+ 'optCiudadesNinguno' + '"' + ' value=' + '"'
+ 'optCiudadesninguno' + '"' + '>'
+ 'ninguno'+ '</OPTION>'
union all
select '<OPTION id=' + '"' + 'optCiudades' + convert
(nvarchar(4),cod_departamentos.departamento) + '-' +
convert(nvarchar(4),cod_ciudades.ciudad) + '"' + ' '
+ 'name=' + '"' + 'optCiudades' + convert(nvarchar
(4),cod_departamentos.departamento) + '-' + convert
(nvarchar(4),cod_ciudades.ciudad) + '"' + ' value=' + '"'
+ convert(nvarchar(4),cod_departamentos.departamento)
+ '-' + convert(nvarchar(4),cod_ciudades.ciudad) + '"'
+ '>' + cod_ciudades.descripcion + '-' +
cod_departamentos.descripcion '</OPTION>'
FROM cod_ciudades INNER JOIN
cod_departamentos ON
cod_departamentos.departamento = cod_ciudades.departamento
WHERE (cod_ciudades.departamento <> '86') AND
(cod_ciudades.departamento <> '88') AND
(cod_ciudades.departamento <> '91') AND
(cod_ciudades.departamento <> '94')
AND (cod_ciudades.departamento <> '95') AND
(cod_ciudades.departamento <> '97') AND
(cod_ciudades.departamento <> '99')
order by cod_ciudades.descripcion asc
GO

**********
me sale un error asi al crear el procedura:
"Error 107: El prefijo de columna 'cod_ciudades' no
coincide con un nombre de tabla o con un alias usado en la
consulta"
MUCHISIMAS GRACIAS A TODOS!
 

Leer las respuestas

#1 Javier Loria
08/07/2004 - 18:42 | Informe spam
Hola Cesar:
Efectivamente el ORDER BY funciona en Procedimientos, pero funciona de
forma diferente en el UNION ALL!!!.
Cuando tienes un UNION ALL se construye primero el conjunto de datos
resultante (o sea se hace primero el union) y luego se ordena, de manera que
tu ORDER BY se esta aplicando incluso al primer SELECT y por eso no existe
la Tabla.
Podrias probar haciendo una SubConsulta:
== SELECT
UNION ALL
SELECT Opcion
FROM
(SELECT '<Option ='+ </Option>' AS Opcion
ORDERY BY cod_ciudades.descripcion asc) AS O
Esto te va a funcionar, pero en teoria no esta garantizado el orden, por
ser un conjunto de datos. Tipicamente estas funciones se hacen mas faciles
en el cliente y no en SQL.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Cesar Correa escribio:
Buenos dias a todos,
ayudenme por favor, no les quito tiempo, solo queria saber
si la clausula SQL "ordey by (tabla.campo) " funciona en
un select que tengo en procedimiento almacenado?
te muestro el codigo:

CREATE PROCEDURE finalRes AS
SELECT '<OPTION selected id=' + '"'
+ 'optCiudadesNinguno'+ '"' + ' ' + 'name=' + '"'
+ 'optCiudadesNinguno' + '"' + ' value=' + '"'
+ 'optCiudadesninguno' + '"' + '>'
+ 'ninguno'+ '</OPTION>'
union all
select '<OPTION id=' + '"' + 'optCiudades' + convert
(nvarchar(4),cod_departamentos.departamento) + '-' +
convert(nvarchar(4),cod_ciudades.ciudad) + '"' + ' '
+ 'name=' + '"' + 'optCiudades' + convert(nvarchar
(4),cod_departamentos.departamento) + '-' + convert
(nvarchar(4),cod_ciudades.ciudad) + '"' + ' value=' + '"'
+ convert(nvarchar(4),cod_departamentos.departamento)
+ '-' + convert(nvarchar(4),cod_ciudades.ciudad) + '"'
+ '>' + cod_ciudades.descripcion + '-' +
cod_departamentos.descripcion '</OPTION>'
FROM cod_ciudades INNER JOIN
cod_departamentos ON
cod_departamentos.departamento = cod_ciudades.departamento
WHERE (cod_ciudades.departamento <> '86') AND
(cod_ciudades.departamento <> '88') AND
(cod_ciudades.departamento <> '91') AND
(cod_ciudades.departamento <> '94')
AND (cod_ciudades.departamento <> '95') AND
(cod_ciudades.departamento <> '97') AND
(cod_ciudades.departamento <> '99')
order by cod_ciudades.descripcion asc
GO

**********
me sale un error asi al crear el procedura:
"Error 107: El prefijo de columna 'cod_ciudades' no
coincide con un nombre de tabla o con un alias usado en la
consulta"
MUCHISIMAS GRACIAS A TODOS!

Preguntas similares