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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Alejandro Mesa
30/03/2007 - 19:32 | Informe spam
LuisMiguel,

La palabra "pivot" es una palabra reservada (operardor) en SQL Server 2005,
por lo que debes delimitarla usando entre comillas dobles (si tienes prendido
set quoted_identitfier) o corchetes.

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



SELECT @sql=@sql + '''' + convert(varchar(100), [pivot]) + '''

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



+ @delim + convert(varchar(100), [pivot]) + @delim + ' THEN ' ) + ', '


AMB

"LuisMiguel" wrote:

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




Respuesta Responder a este mensaje
#3 LuisMiguel
30/03/2007 - 19:58 | Informe spam
Gracias Alejandro
Efectivamente funciona con ese cambio (mis disculpas a Maxi por no
explicarme bien) el error era que no me creaba el almacenado.
Pero me gustaria saber porque en la BD que adjunte del MSDE si me funcionaba
(curiosidad mas que otra cosa)

Gracias de nuevo

Suerte
LuisMiguel
"Alejandro Mesa" escribió en el
mensaje news:
LuisMiguel,

La palabra "pivot" es una palabra reservada (operardor) en SQL Server
2005,
por lo que debes delimitarla usando entre comillas dobles (si tienes
prendido
set quoted_identitfier) o corchetes.

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



SELECT @sql=@sql + '''' + convert(varchar(100), [pivot]) + '''

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



+ @delim + convert(varchar(100), [pivot]) + @delim + ' THEN ' ) + ', '


AMB

"LuisMiguel" wrote:

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







Respuesta Responder a este mensaje
#4 Alejandro Mesa
31/03/2007 - 01:54 | Informe spam
LuisMiguel,

MSDE es una version sin costo SQL Server 2000


AMB

"LuisMiguel" <lmolinoARROBAyaPUNTOcom> wrote in message
news:
Gracias Alejandro
Efectivamente funciona con ese cambio (mis disculpas a Maxi por no
explicarme bien) el error era que no me creaba el almacenado.
Pero me gustaria saber porque en la BD que adjunte del MSDE si me
funcionaba (curiosidad mas que otra cosa)

Gracias de nuevo

Suerte
LuisMiguel
"Alejandro Mesa" escribió en el
mensaje news:
LuisMiguel,

La palabra "pivot" es una palabra reservada (operardor) en SQL Server
2005,
por lo que debes delimitarla usando entre comillas dobles (si tienes
prendido
set quoted_identitfier) o corchetes.

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



SELECT @sql=@sql + '''' + convert(varchar(100), [pivot]) + '''

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



+ @delim + convert(varchar(100), [pivot]) + @delim + ' THEN ' ) + ', '


AMB

"LuisMiguel" wrote:

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












email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida