String en Stored Procedure

22/05/2007 - 17:37 por Eris Gomez | Informe spam
Hola amigos.

Tengo un problema con un stored procedure y es que cuando le paso un string
muy largo a una variable, me dice que excede el maximo de 128 caracteres.

Alguien me puede ayudar a resolver este inconveniente?

Gracias de antemano.

Preguntas similare

Leer las respuestas

#6 Jose Mariano Alvarez
22/05/2007 - 22:03 | Informe spam
En el post ,
DIJO .
CREATE PROCEDURE insertar_registro
@tabla varchar(20),
@campos varchar(2000),
@valores varchar(3000)
AS
set nocount on
declare @comando varchar(7000)

set @comando='insert into '+@tabla+' ('+@campos+') values ('+@valores+')'
exec(@comando)

set nocount off
GO








Podrias indicar todo el mensaje de error. El Stored no deberia darte
error de concatenacion.

Ese SP es un hermoso SP para injectar codigo desde el cual se puede
tomar control del SQL, luego del servidor y probablemente la red tambien
de acuerdo a como este configurado el servidor. Espero que limites su
uso y que controles los parametros.


Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)


IMPORTANTE

Por favor traten de indicar la versión de SQL y Service Pack.
La inclusión de (CREATE, INSERTS, etc.) para poder reproducir el
problema también ayuda.
Respuesta Responder a este mensaje
#7 Alejandro Mesa
23/05/2007 - 02:46 | Informe spam
Eris Gomez,

Por eso es importante postear la mayor cantidad de informacion que se pueda,
cuando se postea una pregunta o problema.

Noto que estas encerrando entre corchetes [], el valor del ultimo parametro
y SQL Server interpreta eso como un identificador,
por lo que este no puede tener mas de 128 caracteres. Para pasar apostrofes
comoparte
de la cadena, debes duplicar cada uno de ellos.

@valores='
''5'',
''000008'',
''YONAIDES TAVARES'',
'''',
''LA JOYA'',
''12100124938'',
''20070522'',
''2500.00'',
''1'',
''A'',
'''',
'' '',
'''',
''ANDRES PEREZ'',
''0'',
''1'',
''01'',
'''',
'''',
'''',
'''',
'''',
''''
'

Si ejecutas este script, obtendras el mismo error que obtienes cuando tratas
de
ejecutar tu sp. Este script encierra 130 caracteres entre corchetes.

select
[
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
]
go


AMB
AMB

"Eris Gomez" wrote:

EXEC insertar_registro
@tabla='cxcclien',@campos='codcia_cli,codcli_cli,nombre_cli,contac_cli,direcc_cli,cedul_cli,fecing_cli,limite_cli,tipcxc_cli,status_cli,telefo_cli,fecnac_cli,email_cli,referi_cli,exeitb_cli,tipdoc_cli,clancf_cli,empres_cli,direps_cli,carcon_cli,telcon_cli,celcon_cli,emlcon_cli',@valores=['
5','000008','YONAIDES TAVARES','','LA JOYA','12100124938','20070522','
2500.00','1','A','',' ','','ANDRES
PEREZ','0','1','01','','','','','','']

"Alejandro Mesa" escribió en el
mensaje news:
> Eris Gomez,
>
> Puede ser que le estes pasando el nombre de una tabla o columna con mas de
> 128 caracteres.
>
> Puedes postear el valor de los parametros que causan el error?
>
> AMB
>
> "Eris Gomez" wrote:
>
>> CREATE PROCEDURE insertar_registro
>> @tabla varchar(20),
>> @campos varchar(2000),
>> @valores varchar(3000)
>> AS
>> set nocount on
>> declare @comando varchar(7000)
>>
>> set @comando='insert into '+@tabla+' ('+@campos+') values ('+@valores+')'
>> exec(@comando)
>>
>> set nocount off
>> GO
>>
>>
>>
>>
>




Respuesta Responder a este mensaje
#8 Jesús López
23/05/2007 - 15:16 | Informe spam
Ya sé que no es asunto mío y no es mi intención criticar por criticar. Pero
no lo puedo evitar, no le veo ningún sentido a ese procedimiento almacenado.
Lo de usar procedimientos almacenados está muy bien en general, pero ese
procedimiento no encapsula nada, no se reutilizan los planes de ejecución y
encima es susceptible de inyección SQL.

Para hacer procedimientos almacenados así sería mejor no hacer ninguno, para
eso es mejor usar instruccíones SQL parametrizadas desde el cliente o mejor
aún crear un procedimiento para cada tabla.

Saludos:

Jesús
www.solidq.com






"Eris Gomez" escribió en el mensaje
news:
CREATE PROCEDURE insertar_registro
@tabla varchar(20),
@campos varchar(2000),
@valores varchar(3000)
AS
set nocount on
declare @comando varchar(7000)

set @comando='insert into '+@tabla+' ('+@campos+') values ('+@valores+')'
exec(@comando)

set nocount off
GO



Respuesta Responder a este mensaje
#9 Eris Gomez
23/05/2007 - 15:24 | Informe spam
Gracias Alejandro, tu solucion me funciono a la perfeccion.
Respuesta Responder a este mensaje
#10 Maxi
24/05/2007 - 16:10 | Informe spam
Hola, coincido plenamente contigo!, no hay que usar siempre la misma
herramienta, hay que saber cuando usarla y cuando no


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Jesús López" escribió en el mensaje
news:
Ya sé que no es asunto mío y no es mi intención criticar por criticar.
Pero no lo puedo evitar, no le veo ningún sentido a ese procedimiento
almacenado. Lo de usar procedimientos almacenados está muy bien en
general, pero ese procedimiento no encapsula nada, no se reutilizan los
planes de ejecución y encima es susceptible de inyección SQL.

Para hacer procedimientos almacenados así sería mejor no hacer ninguno,
para eso es mejor usar instruccíones SQL parametrizadas desde el cliente o
mejor aún crear un procedimiento para cada tabla.

Saludos:

Jesús
www.solidq.com






"Eris Gomez" escribió en el mensaje
news:
CREATE PROCEDURE insertar_registro
@tabla varchar(20),
@campos varchar(2000),
@valores varchar(3000)
AS
set nocount on
declare @comando varchar(7000)

set @comando='insert into '+@tabla+' ('+@campos+') values ('+@valores+')'
exec(@comando)

set nocount off
GO







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