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:%
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

Respuesta Responder a este mensaje
#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:

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



Respuesta Responder a este mensaje
#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
dbo.Pases ON dbo.Expedientes.IdExpte =
dbo.Pases.CodExpte
WHERE (dbo.Pases.CodSector = 59)





Hugo A. Gsell
Sgo del Estero
Argentina

"Maxi" escribió en el mensaje
news:
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:%
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





Respuesta Responder a este mensaje
#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:
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
>> dbo.Pases ON dbo.Expedientes.IdExpte > >> dbo.Pases.CodExpte
>> WHERE (dbo.Pases.CodSector = 59)

Hugo A. Gsell
Sgo del Estero
Argentina

"Maxi" escribió en el mensaje
news:
>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:%
>> 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
>>
>
>


Respuesta Responder a este mensaje
#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:

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
>> dbo.Pases ON dbo.Expedientes.IdExpte =
>> dbo.Pases.CodExpte
>> WHERE (dbo.Pases.CodSector = 59)

Hugo A. Gsell
Sgo del Estero
Argentina

"Maxi" escribió en el mensaje
news:
>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:%
>> 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
>>
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida