首页 > 解决方案 > 从过程中调用函数

问题描述

我不能从一个过程中调用我的函数,我不明白为什么。该功能正在工作,但在程序中却没有。

我尝试编写一些代码来检查用户名是否已存在于我创建的表中。

--Boolean Function If Username Exists Or Not

CREATE FUNCTION Fun_Exists_Username
    (@Username_to_check VARCHAR(10))
RETURNS INT 
AS
BEGIN
    DECLARE @Boolean BIT

    IF EXISTS (SELECT UserName FROM UTBL_Players WHERE @Username_to_check = UserName)
        SET @Boolean = 1
     ELSE 
        SET @Boolean = 0

     RETURN @Boolean
END

-- Procedure that get username and chek it
CREATE PROCEDURE Usp_Username
    @UserName VARCHAR(10)
AS
BEGIN
    DECLARE @Boolean INT

    SELECT @Boolean = Fun_Exists_Username(@UserName)

    IF @Boolean = 0
        PRINT 'This user name already exists.
            You can use this user name: '   -- function that returns a free username
    ELSE 
        PRINT 'This user name is fine'
END

我收到此错误:

消息 195,级别 15,状态 10,过程 Usp_Username,第 7 行 [批处理开始第 24 行]“Fun_Exists_Username”不是可识别的内置函数名称。

标签: sql-serverstored-proceduresstored-functions

解决方案


创建和调用函数时必须使用模式前缀

所以将创建更改为:

CREATE FUNCTION dbo.Fun_Exists_Username

并在调用它时,使用它:

SELECT @Boolean = dbo.Fun_Exists_Username(@UserName)

推荐阅读