Sobre crosstab

30/03/2007 - 18:48 por LuisMiguel | Informe spam
Buenas
Intentare explicarme.
1 ordenador con MSDE2000. utilizo un almacenado que me devuelve una
crosstab. (lo encontre en los foros)
2 ordenador con SQLEXPRESS
Si al ordenador del SQLEXPRESS, le pongo una de las BD del MSDE, me permite
ejecutar el almacenado, si creo la BD directamente en el SQLEXPRESS, no me
funciona, podeis darme alguna pista?

Este es el almacenado

CREATE PROCEDURE crosstab

@select varchar(8000),

@sumfunc varchar(100),

@pivot varchar(100),

@table varchar(100)



AS

DECLARE @sql varchar(8000), @delim varchar(1)

SET NOCOUNT ON

SET ANSI_WARNINGS OFF



EXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table +
' WHERE 1=2')

EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' +
@table + ' WHERE '

+ @pivot + ' Is Not Null')



SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, '
END)' )



SELECT @delimÊSE Sign( CharIndex('char',
data_type)+CharIndex('date', data_type) )

WHEN 0 THEN '' ELSE '''' END

FROM tempdb.information_schema.columns

WHERE table_name='##pivot' AND column_name='pivot'



Error -> SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + '''
= ' +

stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot +
' WHEN '

+ @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', '
FROM ##pivot



DROP TABLE ##pivot



SELECT @sql=left(@sql, len(@sql)-1)

SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ',
' + @sql + ' ')



EXEC (@select)



Gracias por llegar hasta aqui
 

Leer las respuestas

#1 Maxi
30/03/2007 - 19:23 | Informe spam
No te entendi nada che, que cosa no funciona? que error da?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:
Buenas
Intentare explicarme.
1 ordenador con MSDE2000. utilizo un almacenado que me devuelve una
crosstab. (lo encontre en los foros)
2 ordenador con SQLEXPRESS
Si al ordenador del SQLEXPRESS, le pongo una de las BD del MSDE, me
permite ejecutar el almacenado, si creo la BD directamente en el
SQLEXPRESS, no me funciona, podeis darme alguna pista?

Este es el almacenado

CREATE PROCEDURE crosstab

@select varchar(8000),

@sumfunc varchar(100),

@pivot varchar(100),

@table varchar(100)



AS

DECLARE @sql varchar(8000), @delim varchar(1)

SET NOCOUNT ON

SET ANSI_WARNINGS OFF



EXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table
+ ' WHERE 1=2')

EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' +
@table + ' WHERE '

+ @pivot + ' Is Not Null')



SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, '
END)' )



SELECT @delimÊSE Sign( CharIndex('char',
data_type)+CharIndex('date', data_type) )

WHEN 0 THEN '' ELSE '''' END

FROM tempdb.information_schema.columns

WHERE table_name='##pivot' AND column_name='pivot'



Error -> SELECT @sql=@sql + '''' + convert(varchar(100), pivot) +
''' = ' +

stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot +
' WHEN '

+ @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ',
' FROM ##pivot



DROP TABLE ##pivot



SELECT @sql=left(@sql, len(@sql)-1)

SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ',
' + @sql + ' ')



EXEC (@select)



Gracias por llegar hasta aqui



Preguntas similares