我有這個功能的問題,好像@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