0

공간 쿼리 (SQL Server 2016)에서 매개 변수화 된 저장 프로 시저를 만들려고합니다. 기본 공간 쿼리는 매개 변수 (/경도)가 하드 코딩 된 경우 잘 작동합니다 (예 : 174.7115).공간 쿼리 : 사용자 정의 루틴 또는 집계 "지역"을 실행하는 동안 .NET Framework 오류가 발생했습니다.

위도 (@long)에 대한 매개 변수를 사용하여 저장 프로 시저를 만들려고하면 다음 오류가 발생합니다. 메시지 6522

, 수준 16, 상태 1, 프로 시저 Spatial8, 5 호선 [일괄 시작 줄 0] 닷넷 프레임 워크 오류가 사용자 정의 루틴 또는 집계 "지리"의 실행 중에 발생 시스템 .FormatException : 24141 : 숫자 11 위치의 입력 예상됩니다. 입력에는 @Long이 있습니다. System.FormatException : Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText (OpenGisType 형) 에서 Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble() Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText (부울 parseParentheses)에서 에서 에서 Microsoft.SqlServer.Types.SqlGeography.GeographyFromText에서 Microsoft.SqlServer.Types.SqlGeography.ParseText (OpenGisType 타입 SqlChars taggedText, INT32의 SRID) 에서 Microsoft.SqlServer.Types.WellKnownTextReader.Read (OpenGisType 유형의 INT32 SRID) (OpenGisType 형식, SqlChars taggedText, Int32 srid) .........................

여기에 63,210

는 저장된 프로 시저입니다 .., 제안, 또는 작업 방법은

CREATE PROC Spatial8 @Long decimal(9,6) 
AS 
DECLARE @Car geography; 
SET @Car = geography::STGeomFromText ('Point(@Long -36.81143)', 4326); 

/* Add 20m buffer to each side of the cars position (Lat and long) */ 
DECLARE @Pointbuffer geography; 
SET @Pointbuffer = @Car.STBuffer ('20'); 

Select *, @Pointbuffer.STContains(geography ::Point(Latitude, Longitude, 4326)) As PointBuffer 
From dbo.Location 
WHERE @Pointbuffer.STContains(geography ::Point(Latitude, Longitude, 4326)) = 1 

어떤 조언을 주시면 감사하겠습니다. Geography to Geometry를 바꾸려고 시도했지만 여전히 동일한 오류가 발생합니다.

답변

1

SQL Server는 형상 태그가 지정된 텍스트에서 매개 변수를 단독으로 대체하지 않습니다.

유형의 변수 @geometry_tagged_text을 만들고 아래 형식으로 구성한 다음 해당 매개 변수를 geography::STGeomFromText으로 전달하십시오.

DECLARE @geometry_tagged_text NVARCHAR(MAX); 
SET @geometry_tagged_text=N'Point('+CAST(@Long AS NVARCHAR)+N' -36.81143)'; 

DECLARE @Car geography; 
SET @Car = geography::STGeomFromText (@geometry_tagged_text, 4326);