J'ai des problèmes avec cette fonction, semble @idUsuario
et @passCorrecto
ne reçoivent aucune valeur, donc, quand j'utilise ces variables dans la clause where, je ne reçois aucune donnée de résultat.problème avec la fonction de table de déclaration multi-valeur, qu'est-ce que je fais mal?
ALTER FUNCTION [dbo].[login](@usuario varchar(20), @password varchar(20))
RETURNS @info TABLE (nombre varchar(70) not null, tipo varchar(30) not null)
AS
BEGIN
DECLARE @idUsuario int = dbo.usuarioExiste(@usuario)
DECLARE @passCorrecto bit = dbo.passwordCorrecto(@idUsuario, @password)
INSERT @info
SELECT
usuarios.nombreUsuario, tiposUsuarios.tipoUsuario
FROM
usuarios
LEFT JOIN
tiposUsuarios
ON
usuarios.idTipoUsuario = tiposUsuarios.idTipoUsuario
WHERE
usuarios.idUsuario = @idUsuario and
usuarios.estatus = 'ACTIVO' and
@passCorrecto = 1
RETURN
END
Qu'est-ce que je fais mal?
EDIT
Voici les fonctions utilisées ci-dessus:
ALTER FUNCTION [dbo].[usuarioExiste]
(
@usuario varchar(20)
)
RETURNS integer
AS
BEGIN
DECLARE @idUsuario integer
SELECT
@idUsuario = idUsuario
FROM
usuarios
WHERE
usuario = @usuario
if @idUsuario is null begin
set @idUsuario = 0
end
RETURN @idUsuario
END
ALTER FUNCTION [dbo].[passwordCorrecto]
(
@usuario varchar(20),
@password varchar(20)
)
RETURNS bit
AS
BEGIN
DECLARE @esCorrecto bit
SELECT
@esCorrecto = case when password = @password then 1 else 0 end
FROM
usuarios
WHERE
usuario = @usuario
RETURN @esCorrecto
END
EDIT 2
Comme suggéré par Beth, j'ai créé de nouvelles fonctions qui renvoie les valeurs que j'ai besoin comme ceci:
CREATE FUNCTION [dbo].[usuarioExisteTest]
(
@usuario varchar(20)
)
RETURNS int
AS
BEGIN
declare @idUsuario int;
set @idUsuario = 1;
return (@idUsuario);
END;
En faisant cela, je reçois les données dont j'ai besoin, est-ce que je règle les valeurs pour retourner dans le mauvais sens dans les fonctions d'origine?
DECLARE @idUsuario integer
SELECT
@idUsuario = idUsuario
FROM
usuarios
WHERE
usuario = @usuario
Quelle version de SQL Server sont vous u chanter? Vous ne pouvez pas déclarer et définir des variables sur la même ligne en 2005 ou avant. – LittleBobbyTables
@LittleBobby - Cela soulèverait une erreur de syntaxe si. Je soupçonne que la question doit être dans la définition ou l'appel de 'dbo.usuarioExiste (@usuario)' –
@ Martin Smith - J'ai pensé à cela aussi, après que je l'ai posté, mais je pensais qu'il ne pouvait pas faire mal à demander. – LittleBobbyTables