Sql server 使用SQL函数

Sql server 使用SQL函数,sql-server,function,sql-server-2012,Sql Server,Function,Sql Server 2012,您好,我正在尝试在ms sql server中创建一个函数,该函数接受整数参数并返回varchar。然而,我在实施这一点时遇到了一些困难,我非常希望能得到一些帮助: CREATE FUNCTION GetCategory (@CategoryID int) RETURNS int AS BEGIN DECLARE @Category varchar(64) @Category = (SELECT Category FROM Categories WHERE C

您好,我正在尝试在ms sql server中创建一个函数,该函数接受整数参数并返回varchar。然而,我在实施这一点时遇到了一些困难,我非常希望能得到一些帮助:

CREATE FUNCTION GetCategory (@CategoryID int)
RETURNS int 
AS
BEGIN
    DECLARE @Category varchar(64)

    @Category = (SELECT Category
    FROM Categories
    WHERE CategoryID = @CategoryID)

    RETURN @Category
END
上面的代码是我已经尝试过的。我在执行时得到以下错误:=:

Msg 102, Level 15, State 1, Procedure GetCategory, Line 7
Incorrect syntax near '@Category'.
Msg 137, Level 15, State 2, Procedure GetCategory, Line 11
Must declare the scalar variable "@Category".

当您实际返回varchar 64时,您说返回int。
另外,当你问一个问题并发布什么不起作用的示例代码时,如果你说“什么”不起作用,这会有所帮助。(您收到的错误消息等)。

如果列
CategoryID
是表中的主键,并且您100%确定只有一个类别具有particualr CategoryID,则您的代码是安全的,但是,如果它不是主键,并且可能有多个类别具有相同的CategoryID,那么我建议在SELECT语句中使用
SELECT TOP 1

CREATE FUNCTION GetCategory (@CategoryID int)
RETURNS varchar(64)        --<-- This needs to be the datatype you want to return
AS
BEGIN
    DECLARE @Category varchar(64);

    SELECT @Category =  Category
    FROM  Categories
    WHERE CategoryID = @CategoryID

    RETURN @Category;
END

好的,谢谢你的工作,但是我现在调用这个函数有困难,我尝试了exec dbo.GetCategory(1),但它不起作用,我得到了“exec dbo.GetCategory(1)”查看我的更新如何调用这个函数,exec或EXECUTE用于调用存储过程,函数只与SELECT语句一起使用。好的,谢谢你,这对我来说很有意义,我完全理解:)
SELECT dbo.GetCategory (1);