我正在尝试创建一个函数,我已经在数据库中拥有该函数。为了绕过这个我正在使用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
答案 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