2012-08-05 47 views
0

我試圖創建一個函數,並且我已經在數據庫中有該函數。爲了繞過這個,我使用了drop函數,但是我仍然不斷地獲取已經在數據庫中名爲'getCost'的對象'。可能是什麼原因?DROP FUNCTION不起作用?

查詢:

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

問題出在您的If條件請參閱LolCoder回答 – 2012-08-05 12:43:03

+0

與您的問題無關,但爲什麼您的CREATE FUNCTION沒有明確說出'dbo.getCost'? – 2012-08-05 14:59:31

回答

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 
6

你是一個標量函數,因爲它是隻返回一個值,因此,如果子句中你必須提到FN代替TF的。閱讀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 

你是不是返回表。所以R的單值ETURNS int是一個多選標量函數 其中返回表是一個表值函數

+0

謝謝,我對tsql相當陌生,我經常犯這樣的愚蠢錯誤: – kyooryu 2012-08-05 12:50:34

+0

+1提到的問題。 'TF到FN' – 2012-08-05 14:10:06

相關問題