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