DROP FUNCTION不起作用?

时间:2012-08-05 12:30:26

标签: sql-server tsql sql-server-2008-r2

我正在尝试创建一个函数,我已经在数据库中拥有该函数。为了绕过这个我正在使用drop函数,但我仍然继续在数据库中获得'theres already object'的命名'getCost'。可能是什么原因?

查询:

USE DWDB_PROPER;
GO
IF OBJECT_ID (N'dbo.getCost', N'TF') IS NOT NULL
DROP FUNCTION dbo.getCost;
GO
CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT, @year SMALLINT, @Category    VARCHAR(20))
RETURNS INT 
AS
BEGIN
--function body here

2 个答案:

答案 0 :(得分:6)

你的是一个标量函数,因为它只返回一个值所以在if子句中你应该提到FN而不是TF.Read this

USE DWDB_PROPER;
GO
IF OBJECT_ID (N'dbo.getCost', N'FN') IS NOT NULL
DROP FUNCTION dbo.getCost;
GO
CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT, @year SMALLINT, @Category       VARCHAR(20))
RETURNS INT 
AS
BEGIN
--function body here

您将返回单个值而不是表.So RETURNS int是一个多选标量函数 其中返回表是表值函数

答案 1 :(得分:2)

尝试以下查询:

USE DWDB_PROPER;
GO
IF EXISTS (
    SELECT * FROM sysobjects WHERE id = object_id(N'dbo.getCost') 
    AND xtype IN (N'FN', N'IF', N'TF')
)
    DROP FUNCTION dbo.getCost
GO
CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT, @year SMALLINT, @Category    VARCHAR(20))
RETURNS INT 
AS
BEGIN