2009-12-19 5 views
2

TrackingData 테이블은 Tracking이라는 데이터베이스 안에 있습니다. 저장 프로시 저는 동일한 데이터베이스 내에서 실행됩니다. 쿼리를 사용하여 데이터를 다시 가져 오지만 SP는 사용하지 않습니다.이 SQL은 저장 프로 시저로 작동하지 않지만 일반 쿼리로 잘 작동하는 이유는 무엇입니까?

SELECT * 
    FROM 
     dbo.TrackingData 
     LEFT OUTER JOIN SSMain.dbo.EmailCampaignTracking ON (dbo.TrackingData.emailCampaginTrackingID = SShMain.dbo.EmailCampaignTracking.emailCampaignTrackingID) 
     LEFT OUTER JOIN SSMain.dbo.EmailCampaigns ON (SSMain.dbo.EmailCampaignTracking.emailCampaignID = SSMain.dbo.EmailCampaigns.emailCampaignID) 
     LEFT OUTER JOIN SpinStitchMain.dbo.EmailListAddresses ON (SSMain.dbo.EmailCampaignTracking.emailAddressID = SSMain.dbo.EmailListAddresses.emailAddressID) 
    WHERE 
     dbo.TrackingData.lattitude = 33.8322 AND 
     dbo.TrackingData.longitude = -78.6491 and 
     dbo.TrackingData.projectID = 131 

CREATE PROCEDURE dbo.sel_Track_HitsByLatLong(
@latitude decimal(18,15), 
@longitude decimal(18,15), 
@projectID int 
) 
AS 
BEGIN 
SELECT * 
FROM 
    dbo.TrackingData 
    LEFT OUTER JOIN SSMain.dbo.EmailCampaignTracking ON (dbo.TrackingData.emailCampaginTrackingID = SSMain.dbo.EmailCampaignTracking.emailCampaignTrackingID) 
    LEFT OUTER JOIN SSMain.dbo.EmailCampaigns ON (SSMain.dbo.EmailCampaignTracking.emailCampaignID = SSMain.dbo.EmailCampaigns.emailCampaignID) 
    LEFT OUTER JOIN SSMain.dbo.EmailListAddresses ON (SSMain.dbo.EmailCampaignTracking.emailAddressID = SSMain.dbo.EmailListAddresses.emailAddressID) 
WHERE 
    dbo.TrackingData.lattitude = @latitude AND 
    dbo.TrackingData.longitude = @longitude and 
    dbo.TrackingData.projectID = @projectID 
END 

편집 :이 변경 사항을 확인 dnot을 befor 일어난 적이있다 33.832200000000000

:

이 밝혀 숫자가 점점 제로는 이들의 끝에 추가. 의사 표시가 실행되면 추가됩니다.

+0

십진수 대신 NUMERIC을 사용해 보았습니까? –

+0

SP에 전화하는 방법의 예를 제공 할 수 있습니까? – Moose

+0

D, 제 데이터에 0이 추가되었습니다. 이것은 십진수에서 15 자리 정밀도를 사용하기 때문입니다. 적어도 SQL Server 2005에서는 문제가되지 않습니다. 해결책을 찾았습니까? – Moose

답변

0

OK 일치 할 때 저장된 프로 시저 쿼리 반환 작업을하고 무엇을 정확히 볼 수이 사이에이 저장된 시저

SELECT @latitude, @longitude, @projectID 

를 추가, 그래서 Lat 및 Long 매개 변수를 FLOAT 유형으로 변경했습니다. 이제 완벽하게 작동합니다. 필자는 params를 십진수 (18,15)로 보낼 때 정확도가 15보다 낮 으면 끝에 0을 추가한다고 생각하지 않았습니다.이 문제를 도와 준 모든 사람들에게 감사드립니다.

3

나는 그것이 변환 문제와 관련이있을 것이라고 생각합니다. TrackingData.lattitude 및 TrackingData.longitude는 실제로 테이블에서 십진수 (18,15)입니까?

SP의 매개 변수를 첫 번째 쿼리의 두 값으로 바꾸고 대답을 되 찾을 수 있습니까? 그렇다면 매개 변수를 전달할 때 변환의 어딘가에있는 것입니다.

+0

YE들, 그들은 정말로 십진수입니다 (18,15). 예, 저는 params를 valuse로 대체 할 수 있습니다. – DDiVita

+0

어떻게 부르시겠습니까? ado.net을 통해? 임원 성명서로? 우리에게 호출 코드를 보여주세요. 아마 거기에 뭔가를 볼 수 있습니다. – Ray

+0

저는 매니저 스튜디오 – DDiVita

0

SQL Server 프로파일 러에 액세스 할 수 있습니까? 그렇다면 실제로 매개 변수로 실행 함수에 전달되는 내용을 추적하는 것이 좋습니다. 아마도 SP에 전달되는 값에 정밀 문제가있을 수 있습니다. 당신은 131을 생각하지만 당신은 131.00000000000000000000000000001을 얻고 있습니다.

+0

이것은 십진수가 아닌 부동 소수점에서만 발생합니다. – gbn

+0

FP가 수행되는 방식에 "부동 소수점"숫자가 발생할 수 있다고 가정합니다. – GrayWizardx

1

나는 Lat 's와 Long 's를 항상 사용하며 데이터 유형으로 DECIMAL (18,15)을 사용했습니다. 나는 또한이 문제 :(나를 위해

했다

, 그것은 현지화 문제였다 - 비에서 사용자는 EN-US/EN-GB 등 .. 위치는 내 사이트를 공격, 기간은> 때 COMMA로 바뀌 었습니다. 그래서 나는 십진법 값에 대한 123,111을 전달하려고했다. 실패했다. 이것은 내 .NET 응용 프로그램에서 현재 스레드의 CultureInfo가 사용자 연결 (예 : 스페인, 등)에 대한 es.

.
(닷넷 제품/프로젝트) ....

스레드의 cultureinfo를 en-gb로 설정했는지 확인하십시오 (즉, 스니 페!). 그런 다음 저장된 proc이 작동하는지 확인하십시오.

너무 나 ... 그 버그 : 유, 항상 (EN-AU)과 쿼리로 내 로컬 컴퓨터에 근무 참조를 해결하기 위해 -aaaaaagggggeeeeesssssss- :

행운을 빕니다 :)

+0

아,이게 내 문제 일거야 ..... 내 생각 엔 ..... 다시 쓰겠다. – DDiVita

+0

정말 이상하게 들린다.하지만, 나는 이것이 오류라고 판단한 후에 차를 쳤다. 저장된 프로 시저를 검토하는 데 너무 많은 시간을 할애하여 오류를 일으키지 않았습니다! :) "왜이 소수 자리에 쉼표가 붙어 있니?"라고 생각한 후에였습니다. –

1

FYI와 마찬가지로 위도와 경도는 소수점 이하 자릿수의 십진수 15 자리가 거의 확실한 초과 정밀도입니다. 적도 부근에서 6 자리의 정밀도는 11 센티미터 (4.3 인치) 해상도에 해당합니다. 분자 크기 정밀도로가는 길에 9 개의 크기가 더 있습니다 ....

+0

geo 위치 데이터로 작업 한 DBA가 decmial 유형을 제안했습니다. 우리는 지금 그것을 바꿀 수는 없습니다. – DDiVita

+0

문제 없습니다. 비교의 온상을 위해서 건물의 크기와 관련이있는 경우 그 차이가 0.0001도 (11 미터에 해당), 중간 크기 도시 (1.1 킬로미터)의 경우 0.01이되도록 차이를 계산하는 것이 합리적 일 수 있습니다. . – wallyk

1

저장 프로 시저 밖에서 무엇이 제공됩니까?

... 
WHERE 
    dbo.TrackingData.lattitude = CAST(33.8322 as decimal(18,15)) AND 
    dbo.TrackingData.longitude = CAST(-78.6491 as decimal(18,15)) and 
    dbo.TrackingData.projectID = CAST(131 as int) 

는 그런 다음 데이터 유형이

관련 문제