Quien me Ayuda...

04/10/2005 - 19:09 por Cesar O. Delgado | Informe spam
Sres. tengo un pequeño problema... este SP me funciona bien usandolo por
fuera del Exec(), pero tengo el inconveniente de que lo necesito usar con
Exec() ya que debo pasar un parametro como USERID para formar cadenas, para
crear tablas individuales a los usuarios... esto es de una aplicacion de
reportes que he disenado en VB6, la cual funciona en un ambiente cliente
servidor con una base de datos especifica...

el problema es que cuando coloco el SP de esta forma :

CREATE PROCEDURE AHD.sp_lleno_tipo_causa_userid @userid char(20) AS

SET NOCOUNT ON
declare @servicio varchar(60), @ticket char(15)

exec('DECLARE Cursor_grupos SCROLL CURSOR FOR
SELECT DISTINCT rootcause
FROM AHD.ss_solicitudes_area_' + @userid + ' where rootcause is not
null and tipo_causa in (null, '''')')

OPEN Cursor_grupos

FETCH NEXT FROM Cursor_grupos INTO @servicio

WHILE @@FETCH_STATUS = 0
BEGIN
declare @punto1 int
declare @punto2 int
declare @punto3 int
declare @punto4 int

print @servicio
********************************
Aqui es mi problema
estas lineas deben leer una linea como esta
"IT.ABT.Mantenimiento en Branch Adm"
y desglozar los valores entre puntos(.)
pero estos son los errores que recibo :
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '='.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'en'.
IT.ABT.Mantenimiento en Branch Adm
********************************
exec('set '+ @punto1+ ' = PATINDEX(''%.%'', (select distinct rootcause from
AHD.ss_solicitudes_area_'+ @userid +' where rootcause = ' + @servicio +
'))')
exec('set '+ @punto2 +' = PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto1+'+1,100))')

exec('set '+@punto3 +'= PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto2+'+1,100))')

exec('set '+@punto4 +' = PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto3+'+1,100))')
********************************
********************************
if @punto1 = 0

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid +'
set tipo_causa = rootcause
where rootcause = '+@servicio+'')
End

if @punto1 >= 1

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid+ '
set tipo_causa = ltrim(( select substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+
@userid +'
where rootcause like ' + @servicio + ' ), '+ @punto1+' +
1,
100 ))) where rootcause = '+ @servicio +' ')
End


if @punto2 >= 1

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid +'
set tipo_causa = ltrim(( select substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+
@userid+' where rootcause like '+@servicio+' ), '+ @punto1+ ' + 1, ' +
@punto2 + ' - 1 ))) where rootcause =
'+@servicio+'')
End

FETCH NEXT FROM Cursor_grupos INTO @servicio
END

CLOSE Cursor_grupos
DEALLOCATE Cursor_grupos
GO

Preguntas similare

Leer las respuestas

#1 Lautaurus
04/10/2005 - 19:49 | Informe spam
http://www.hayes.ch/sql/sql_dinamico.html#cursor


Cesar O. Delgado escribió:
Sres. tengo un pequeño problema... este SP me funciona bien usandolo por
fuera del Exec(), pero tengo el inconveniente de que lo necesito usar con
Exec() ya que debo pasar un parametro como USERID para formar cadenas, para
crear tablas individuales a los usuarios... esto es de una aplicacion de
reportes que he disenado en VB6, la cual funciona en un ambiente cliente
servidor con una base de datos especifica...

el problema es que cuando coloco el SP de esta forma :

CREATE PROCEDURE AHD.sp_lleno_tipo_causa_userid @userid char(20) AS

SET NOCOUNT ON
declare @servicio varchar(60), @ticket char(15)

exec('DECLARE Cursor_grupos SCROLL CURSOR FOR
SELECT DISTINCT rootcause
FROM AHD.ss_solicitudes_area_' + @userid + ' where rootcause is not
null and tipo_causa in (null, '''')')

OPEN Cursor_grupos

FETCH NEXT FROM Cursor_grupos INTO @servicio

WHILE @@FETCH_STATUS = 0
BEGIN
declare @punto1 int
declare @punto2 int
declare @punto3 int
declare @punto4 int

print @servicio
********************************
Aqui es mi problema
estas lineas deben leer una linea como esta
"IT.ABT.Mantenimiento en Branch Adm"
y desglozar los valores entre puntos(.)
pero estos son los errores que recibo :
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '='.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'en'.
IT.ABT.Mantenimiento en Branch Adm
********************************
exec('set '+ @punto1+ ' = PATINDEX(''%.%'', (select distinct rootcause from
AHD.ss_solicitudes_area_'+ @userid +' where rootcause = ' + @servicio +
'))')
exec('set '+ @punto2 +' = PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto1+'+1,100))')

exec('set '+@punto3 +'= PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto2+'+1,100))')

exec('set '+@punto4 +' = PATINDEX(''%.%'', substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+ @userid +' where rootcause =
'+@servicio+'),'+@punto3+'+1,100))')
********************************
********************************
if @punto1 = 0

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid +'
set tipo_causa = rootcause
where rootcause = '+@servicio+'')
End

if @punto1 >= 1

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid+ '
set tipo_causa = ltrim(( select substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+
@userid +'
where rootcause like ' + @servicio + ' ), '+ @punto1+' +
1,
100 ))) where rootcause = '+ @servicio +' ')
End


if @punto2 >= 1

Begin

exec('UPDATE AHD.ss_solicitudes_area_'+ @userid +'
set tipo_causa = ltrim(( select substring((select distinct
rootcause from AHD.ss_solicitudes_area_'+
@userid+' where rootcause like '+@servicio+' ), '+ @punto1+ ' + 1, ' +
@punto2 + ' - 1 ))) where rootcause =
'+@servicio+'')
End

FETCH NEXT FROM Cursor_grupos INTO @servicio
END

CLOSE Cursor_grupos
DEALLOCATE Cursor_grupos
GO



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