为什么我要收到数据库中已经有一个名为'XXX'的对象?

use*_*567 0 sql sql-server sql-server-2008

我正在做简单的事情,这是有道理的,

IF EXISTS(SELECT * FROM sysobjects WHERE xtype = 'TF' AND name = 'GetGeographyFromSourceID')
BEGIN
    DROP FUNCTION dbo.GetGeographyFromSourceID
END
GO

CREATE FUNCTION dbo.GetGeographyFromSourceID
(
    @SourceID INT
)
RETURNS  GEOGRAPHY
AS
BEGIN
    DECLARE @Longitude FLOAT = 0; 
    DECLARE @Latitude FLOAT = 0; 
    DECLARE @Geo GEOGRAPHY;

    SELECT  @Longitude = Longitude, 
            @Latitude = Latitude 
    FROM    Sources 
    WHERE   ID = @SourceID; 

    SELECT @Geo = geography::STGeomFromText('POINT(' + CONVERT(VARCHAR( 100), @Longitude) + ' ' + CONVERT( VARCHAR( 100),@Latitude) + ')', 4326);

    RETURN(@Geo)
END
Run Code Online (Sandbox Code Playgroud)

如果存在而不是删除它并重新创建它.但我收到了错误There is already an object named 'XXX' in the database?

jaz*_*ato 5

您正在测试数据库中是否存在表值函数,但您描述的函数不返回表.在此之前替换代码的第一部分(在开始之前),然后重试:

IF EXISTS (
    SELECT * FROM sysobjects WHERE id = object_id(N'GetGeographyFromSourceID') 
    AND xtype IN (N'FN', N'IF', N'TF')
)
    DROP FUNCTION GetGeographyFromSourceID
GO
Run Code Online (Sandbox Code Playgroud)