2010-06-29 6 views
-1

나는 4 개 변수, @ DCUId, @ SlaveAddress, @ DateFrom, @ SP를 내 도움말

DateTo 나는 다음과 같은 한 전달하는 저장 프로 시저가 있습니다

DECLARE @MinAmbient decimal (4,1),@AverageAmbient decimal (4,1) 
DECLARE @MaxAmbient decimal (4,1) 

SELECT @MaxAmbient = MAX(CAST(T4 AS DECIMAL))/10, 
@MinAmbient = MIN(CAST(T4 AS DECIMAL))/10, 
@AverageAmbient = AVG(CAST(T4 AS DECIMAL))/10 
FROM RECORDEDDETAIL WHERE DCUId = CONVERT(nvarchar(4),@DCUId) 
AND SlaveId = @SlaveAddress 
AND timestamp BETWEEN convert(nvarchar(20), @DateFrom,113) 
AND convert(nvarchar(20), @DateTo,113) 

잘 작동합니다.

나는 'T4'열 값을 내가 전달할 수있는 변수로 만들고 싶습니다. 내가 오류가이 작업을 수행 할 때

DECLARE @TLink nvarchar(3) 
SET @TLink = 'T4' 

다음 내가 잘못 뭐하는 거지 ...

SELECT @MaxAmbient = MAX(CAST(@TLink AS DECIMAL))/10, 
@MinAmbient = MIN(CAST(T4 AS DECIMAL))/10,..... 
.......... etc 

그런 짓을?

감사

로저

더 정확히 내가 달성하기 위해 필요한 명확합니다.

열 T4는 온도를 나타냅니다.이 온도 값은 열 개의 프로브 중 하나에서 나올 수 있습니다. 온도 컬럼에 대한 프로브의 "매핑"은 다른 테이블을 통해 수행됩니다. 그래서 열 값 X가 그래서 전에 맵핑 값을 결정

1 ~ 10 인 송신 될 수

DECLARE의 @TLink의 NVARCHAR (3) SELECT @TLink = TempLinks DCUConfigurations FROM WHERE DCUID = @DCUId

+0

귀하의 유일한 옵션은 동적 SQL로 이동하는 것입니다. – Oded

답변

0

쿼리에서 테이블 열 변수 이름을 사용할 수 없습니다. 동적 쿼리를 사용해야합니다. 예.

DECLARE @TLink nvarchar(3) 
SET @TLink = 'T4' 

exec('select '[email protected]+' from myTable') 

비록 내가 최대한 많이 사용하는 것을 피할 수 있지만. 불안정하고 읽을 수없는 imho 인 동적 쿼리가 없으면 성취하기 위해 무엇을 달성하려고하는지 질문을 더 잘 작성하십시오.

0

T4을 10 진수로 캐스팅하는 중이므로 오류 메시지가 표시되지 않습니다.

필자는 동적으로 열의 이름을 전달하려고합니다. 시작하기 전에이 기사를 읽을 것을 권합니다. http://www.sommarskog.se/dynamic_sql.html

1

많은 Could 옵션을 사용하면 CASE 문을 사용하여이 작업을 수행 할 수 있습니다. 당신이 열 T1, T2, T3 또는 T4를 선택할 수 있다면 는 예를 들어, SELECT 문은 다음과 같을 것이다 :

SELECT @MaxAmbient = MAX(CAST(CASE @Tlink WHEN 'T1' THEN T1 WHEN 'T2' THEN T2 WHEN 'T3' THEN T3 ELSE T4 END AS DECIMAL))/10 
     , @MinAmbient = MIN(CAST(CASE @Tlink WHEN 'T1' THEN T1 WHEN 'T2' THEN T2 WHEN 'T3' THEN T3 ELSE T4 END AS DECIMAL))/10 
     , @AverageAmbient = AVG(CAST(CASE @Tlink WHEN 'T1' THEN T1 WHEN 'T2' THEN T2 WHEN 'T3' THEN T3 ELSE T4 END AS DECIMAL))/10