如何在SQL Server 2008中执行函数

39

我写了一个函数,想要运行它,但是出现了一些错误。

CREATE FUNCTION dbo.Afisho_rankimin(@emri_rest int)
RETURNS int
AS
   BEGIN
       Declare @rankimi int
       Select @rankimi=dbo.RESTORANTET.Rankimi
       From RESTORANTET
       Where  dbo.RESTORANTET.ID_Rest=@emri_rest
       RETURN @rankimi
  END
  GO
    SELECT dbo.Afisho_rankimin(5)AS Rankimi
  GO

执行时出现以下错误:

Msg 2714, Level 16, State 3, Procedure Afisho_rankimin, Line 11
数据库中已经存在名为“ Afisho_rankimin”的对象。

并且还提示:

无法找到列“dbo”,或用户定义的函数或聚合“dbo.Afisho_rankimin”,或名称不明确。


你是否有另一个名称相同但类型不同的对象?请在sys.objects中查找是否有同名对象。 - Martin Smith
3个回答

37

看起来你的数据库中已经有了另一个名为Afisho_rankimin的东西,因此该函数未被创建。尝试给你的函数取一个不同的名字。例如:

似乎你的数据库中已经存在另一个名为Afisho_rankimin的内容,因此该函数无法被创建。请尝试给你的函数取一个不同的名称。例如:

CREATE FUNCTION dbo.Afisho_rankimin1(@emri_rest int)
RETURNS int
AS
   BEGIN
       Declare @rankimi int
       Select @rankimi=dbo.RESTORANTET.Rankimi
       From RESTORANTET
       Where  dbo.RESTORANTET.ID_Rest=@emri_rest
       RETURN @rankimi
  END
  GO

请注意,您只需要调用一次此函数,而不是每次调用该函数时都需要调用。之后,请尝试调用

SELECT dbo.Afisho_rankimin1(5) AS Rankimi 

3
似乎选择语句出错了,提示没有这样的函数。 - Martin Smith
我看到似乎还有另外一个叫这个名字的东西。我会修订答案。 - Yuriy Galanter
1
我也尝试使用 SELECT myfunctionname ......,但是它给了我一个错误,说 无效的列名 - Nad

26

我已经多次遇到这个问题以及下面的一个问题。

如何在SQL Server 2008中调用标量函数

每次,我尝试在 SQL Server Management Studio 或 SSMS 中使用此处显示的语法输入函数以查看结果,但每次都会出现错误。

对我而言,这是因为我的结果集以表格数据格式呈现。因此,要在 SSMS 中查看结果,我必须像这样调用:

SELECT * FROM dbo.Afisho_rankimin_TABLE(5);

我理解作者的问题涉及标量函数,因此这个答案只是为了帮助那些经常在StackOverflow上遇到查询问题的人(比如我)。

我希望这能帮助其他人。


3

你可能之前已经创建过函数,现在可以使用更新的方式再次更新你的函数。

Alter FUNCTION dbo.Afisho_rankimin(@emri_rest int)
RETURNS int
AS
  BEGIN
     Declare @rankimi int
     Select @rankimi=dbo.RESTORANTET.Rankimi
     From RESTORANTET
     Where  dbo.RESTORANTET.ID_Rest=@emri_rest
     RETURN @rankimi
END
GO

SELECT dbo.Afisho_rankimin(5) AS Rankimi
GO

4
如果原始创建的函数用于不同的目的,甚至是由其他人创建的,那么这是危险的建议。除非你已经清楚知道它的作用,否则不应更改函数、存储过程、表或视图。请勿轻易修改它们。 - HLGEM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接