Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/09/2012, 08:27
delgaillo
 
Fecha de Ingreso: abril-2010
Mensajes: 50
Antigüedad: 14 años, 1 mes
Puntos: 2
¿Cómo se pueden concatenar todos los valores de los campos de una tabla en sql 2008?

Hola, tengo una consulta, les agradecería muchísimo una ayuda. La cuestión es que necesito concatenar todos los valores de los campos de una tabla. Juntar todos los valores uno a uno y separarlos por ; , si es nulo poner un espacio. Lo necesito hacer en un procedimiento almacenado que devuelva una cadena con la concatenación. Una forma que he probado fuera del procedimiento es esta:

SELECT ISNULL(CONVERT(nvarchar(MAX),id),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),titulo),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),editorial),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),genero),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),precio),' ') + CAST(';' AS nvarchar(MAX))
AS concatenar FROM LIBROS

Esto me devuelve la siguiente cadena: 1;codigo da vinci;minotauro;misterio;50;

La cuestión es que dentro del procedimiento me falla, lo hago de la siguiente manera:

CREATE PROCEDURE [dbo].[SELECCION]
@id bigint,@devolucion nvarchar(MAX) OUTPUT
AS
BEGIN

DECLARE @devolucion2 nvarchar(MAX);

SET @devolucion2 = SELECT ISNULL(CONVERT(nvarchar(MAX),id),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),titulo),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),editorial),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),genero),' ') + CAST(';' AS nvarchar(MAX))
+ ISNULL(CONVERT(nvarchar(MAX),precio),' ') + CAST(';' AS nvarchar(MAX))
AS concatenar FROM LIBROS
WHERE id= @id)
print @devolucion2


return @devolucion2

END

Me sale el siguiente error:

Msg 245, Level 16, State 1, Procedure SELECCION, Line 35
Conversion failed when converting the nvarchar value 1;codigo da vinci;minotauro;misterio;50; to data type int.

En la línea 35 esta el AS concatenar que es como si valiera int y no se pudiera asignar toda la cadena.

Cómo podría subsanar el error? Otro problema que tengo con esta select de concatenación es que es muy muy larga, si tengo que asignar 50 parámetros, la select sería kilométrica. Alguien sabe alguna otra manera de concatenar estos valores con un código más abreviado y óptimo?

Muchísimas gracias de antemano, espero haberme explicado bien. Gracias.