我有这个功能的问题,好像@idUsuario
和@passCorrecto
没有得到任何价值,所以,当我在where子句中使用这个变量时,我没有得到任何结果数据。多语句表值函数的问题,我做错了什么?
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
我在做什么错了?
EDIT
这里在上文中所使用的函数:
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
编辑2
正如贝丝建议,我创建新函数返回,我需要像中的值这个:
CREATE FUNCTION [dbo].[usuarioExisteTest]
(
@usuario varchar(20)
)
RETURNS int
AS
BEGIN
declare @idUsuario int;
set @idUsuario = 1;
return (@idUsuario);
END;
通过这样做我得到了我需要的数据,我是否将值设置为在原始函数中返回错误的方式?
DECLARE @idUsuario integer
SELECT
@idUsuario = idUsuario
FROM
usuarios
WHERE
usuario = @usuario
什么版本的SQL Server是你的U唱?您不能在2005年或更早的时间在同一行上声明和设置变量。 – LittleBobbyTables 2010-09-14 16:01:39
@LittleBobby - 虽然会引发语法错误。我怀疑这个问题必须出现在dbo.usuarioExiste(@usuario)' – 2010-09-14 16:12:57
@Martin Smith的定义或调用中 - 我在发布它之后也想到了这一点,但是认为它不会受到伤害。 – LittleBobbyTables 2010-09-14 16:20:40