Procedimiento almacenado: parametro tipo nvarchar

01/09/2006 - 16:48 por Hugo Gsell | Informe spam
Tengo un procedimiento almacenado que recibe un parametro de entrada tipo
nvarchar y
dependiendo del mismo ejecuta una acción u otra
el problema es que no me reconoce el valor del parametro les transcribo el
procedimiento.
NOTA: Lo hago funcionar estableciendo el tamaño fijo de caracteres de
parametro... es decir, reemplazando la linea @pModo nvarchar POR @pModo
nvarchar(7)
ES DECIR, si utilizo el procedure en la definicion de pModo sin el (7) y
paso el parametro GNPASE .. NO FUNCIONA.¿Porque?

CREATE PROCEDURE RecuperaExpediente
@pModo nvarchar(7),
@pNroExpte int,
@NroRegsEncontrados smallint output
AS
SET NOCOUNT ON
DECLARE @error int
BEGIN
SET NOCOUNT ON;
IF @pModo = 'GENPASE'
BEGIN
PRINT 'ACA ESTOS INTENTANDO'
SELECT dbo.Expedientes.*, dbo.Pases.CodSector AS Expr1
FROM dbo.Expedientes INNER JOIN
dbo.Pases ON dbo.Expedientes.IdExpte =
dbo.Pases.CodExpte
WHERE (dbo.Pases.CodSector = 59)

SELECT @error = @@ERROR, @NroRegsEncontrados = @@ROWCOUNT
END
ELSE
BEGIN
PRINT 'Aca NO INTENTAMOS NAA JEJEJEJEJJ'
SELECT @error = @@ERROR, @NroRegsEncontrados = @@ROWCOUNT
SET @NroRegsEncontrados = 0
END

END
RETURN @error
GO

Hugo A. Gsell

Preguntas similare

Leer las respuestas

#1 Maxi
01/09/2006 - 17:11 | Informe spam
Y cual es el error? o a que llamas vos que no funciona


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mostrar la cita
#2 Alejandro Mesa
01/09/2006 - 17:14 | Informe spam
Hugo,

Porque al no ponerle la longitud, SQL Server supone que esta es 1.

Ejemplo:

create procedure dbo.p1
@s1 varchar,
@s2 varchar(25)
as
set nocount on

select @s1, datalength(@s1)
select @s2, datalength(@s2)
go

exec dbo.p1 'Microsoft', 'Microsoft'
go

drop procedure dbo.p1
go


AMB


"Hugo Gsell" wrote:

Mostrar la cita
#3 Hugo Gsell
04/09/2006 - 12:08 | Informe spam
Perdon.
El error es que EL IF NO ME DA TRUE (aunque debería)
Es decir, aunque es parámetro sea @pModo = 'GENPASE'
nunca se ejecuta el
select FROM dbo.Expedientes INNER JOIN
Mostrar la cita
Hugo A. Gsell
Sgo del Estero
Argentina

"Maxi" escribió en el mensaje
news:
Mostrar la cita
#4 Carlos Sacristán
04/09/2006 - 14:05 | Informe spam
Yo probaría a sacar en el propio procedimiento el contenido de los
parámetros. Por ejemplo (nota las comillas dobles para ver también los
espacios en blanco:

PRINT 'valor de @pModo: "' + @pModo + '"'


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Hugo Gsell" escribió en el mensaje
news:
Mostrar la cita
tipo
Mostrar la cita
y
Mostrar la cita
#5 Alejandro Mesa
04/09/2006 - 16:57 | Informe spam
Hugo,

Como comente en mi respuesta anterior, al no especificar la longitud de la
cadena, SQL Server asume que es 1, y el valor que se almacena en @pModo sera
N'G', por lo tanto:

IF @pModo = 'GENPASE'

equivale a :

IF N'G' = N'GENPASE'

lo cual es falso.


AMB

"Hugo Gsell" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida