Parámetros Varchar en un Stored Procedure

15/07/2007 - 00:32 por Valeria | Informe spam
Hola !!!
Tengo el siguente problema:
Un stored procedure recibe entre otros parámetros un varchar, el cual
contiene una lista de códigos separados por comas (,). Dentro del sp tengo
este while que genera un temporal con todos los códigos que luego usaré.

WHILE (SELECT CHARINDEX(',', @codigo)) > 0
BEGIN
SELECT @id_codigo = SUBSTRING(@codigo, 1, (SELECT CHARINDEX(',', @codigo))
- 1),
@codigo = SUBSTRING(@codigo, (SELECT CHARINDEX(',', @codigo)) + 1,
LEN(@codigo))

INSERT @TTemp
SELECT @id_codigo
end

El problema es:
si @codigo es varchar --> me devuleve la TTemp vacía.
si @codigo es varchar(1000) --> me completa la TTemp perfectametne.
Sucede que como trabajo con vb.net 2003 que tienen un tipo String, pero
ningún tipo cadena de tamaño fijo.
¿Cómo puedo hacer para compatibilizar el String con el varchar?
Muchas gracias,
Valeria.-
 

Leer las respuestas

#1 Alejandro Mesa
15/07/2007 - 01:06 | Informe spam
Hola Valeria,

No entiendo bien tu pregunta. Siempre que declares una variable o parametro
de tipo varchar, debes especificar su longitud, de lo contrario SS asumira
que es 1.

declare @s varchar

set @s = 'SS 2005 DE'

select @s, datalength(@s)
go

create procedure #p1
@s varchar
as
set nocount on

select @s, datalength(@s)
go

exec #p1 'SS 2005 DE'
go

drop procedure #p1
go

Me inmagino que para invocar el procedimineto almacenado, desde tu
aplicacion .NET, estes usando un objeto tipo SqlCommand y al cual le llenas
la coleccion de parametros con los parametros del procedimiento. Cuando usas
parametros tipo char / varchar, debes especificar su longitud.

SqlParameter Class
http://msdn2.microsoft.com/EN-US/li...lparameter(VS.71).aspx

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html


AMB

"Valeria" wrote:

Hola !!!
Tengo el siguente problema:
Un stored procedure recibe entre otros parámetros un varchar, el cual
contiene una lista de códigos separados por comas (,). Dentro del sp tengo
este while que genera un temporal con todos los códigos que luego usaré.

WHILE (SELECT CHARINDEX(',', @codigo)) > 0
BEGIN
SELECT @id_codigo = SUBSTRING(@codigo, 1, (SELECT CHARINDEX(',', @codigo))
- 1),
@codigo = SUBSTRING(@codigo, (SELECT CHARINDEX(',', @codigo)) + 1,
LEN(@codigo))

INSERT @TTemp
SELECT @id_codigo
end

El problema es:
si @codigo es varchar --> me devuleve la TTemp vacía.
si @codigo es varchar(1000) --> me completa la TTemp perfectametne.
Sucede que como trabajo con vb.net 2003 que tienen un tipo String, pero
ningún tipo cadena de tamaño fijo.
¿Cómo puedo hacer para compatibilizar el String con el varchar?
Muchas gracias,
Valeria.-

Preguntas similares