2011-08-02 2 views
0

예를 들어 테이블에 필드가 있습니다 (a : int, b : int, c : int, d : int) 저장 프로 시저를 쓰고 있습니다. 이 저장 프로시 저는 문자열 ('a'또는 'b'또는 'c'또는 'd')을 제공하고 해당 열에 대해 합계를 반환해야합니다. 나는 재 설계하는 절차 내에서일부 값을 선택하면 열 이름을 알고 있습니다.

DECLARE @sql AS VARCHAR(MAX) 

SET @sql = 'SELECT SUM(' + @col +') FROM my_table' 
EXEC (@sql) 
+0

나는 column_name을 사용할 수 있고 exec와 함께 사용할 수 있다는 것을 알고 있지만 exec는 다른 연결을 엽니 다. 다른 연결을 열지 않습니다. – Masoud

+0

나는 다른 방법을 모른다. 저장 프로 시저와 직접 SQL 코드를 빌드하지 않는 이유 – niktrs

+0

우리가 쓸 때 : a, b를 x에서 선택하십시오.> a와 b는 특별한 포인터입니다. 그들은 단순한 문자열이 아닙니다. 그래서 그 포인터를 찾는 방법이 있어야합니다. – Masoud

답변

1

시도를 동적 SQL을 사용하여

SELECT SUM(
CASE @col -- the param of the stored procedure 
WHEN 'a' THEN col_a 
WHEN 'b' THEN col_b 
WHEN 'c' THEN col_c 
ELSE col_d END) AS sum_of_column 
FROM my_table 

대안을 요약하는 적절한 열을 선택하는 CASE 표현식을 사용하여 SQL 서버 2005

+0

맞습니다. 재 설계가 가장 좋은 방법 인 것 같습니다. 귀하의 의견에 감사드립니다. 그러나이 테이블은 프로그램의 양식과 동일하다고 생각합니다. 그래서 그것을 처리하기가 어려워집니다. 어쨌든 column_name을 매개 변수의 문자열로만 사용하여 데이터에 접근하는 방법이 있다고 생각합니다. – Masoud

+0

나는 가장 좋은 대답 인 것 같다. 그리고 나는 그것을 표시 할 것이다. 그러나 조금 더 이야기 해주십시오. – Masoud

+0

동적 코드를 사용하지 않으면 (해산하는 것처럼 보이지만) 할 방법이 없습니다. 단일 SQL 문은 항상 동일한 "모양"을 갖는 결과 세트를 생성합니다. 즉, 항상 동일한 컬럼을 가지며 "동일한"은 동일한 이름 및 유형을 갖게됨을 의미합니다. 선택한 열을 변경할 수 없으므로 (요청한 것보다 간단한 작업 임) 요구 사항을 충족시킬 수 없습니다. –

2

을 사용하고 하여 데이터베이스를 사용하면 여러 열에 대해 동일한 작업을 구현하지 않아도됩니다. SQL 테이블이 스프레드 시트와 비슷하기 때문에 그렇다고해서이를 다루어야한다는 의미는 아닙니다.

여러 가지 열이 있어야 할 때 데이터의 동일한 "유형"을 나타내는 여러 열과 이러한 값을 구별하기위한 추가 열 (예 : 각 달의 "가치"를 나타 내기 위해 열 12 개를 갖는 것보다 월과 "값"을 저장하는 두 개의 열이 있어야합니다.

+0

대소 문자를 사용하고 싶지 않습니다. 500 개의 기둥이 있는지 상상해보십시오. 그것은 체계적인 방법이 아닙니다. – Masoud

+1

동적 SQL 대안은 어떻습니까? – niktrs

+0

나는 column_name을 사용할 수 있고 exec와 함께 사용할 수 있다는 것을 알고 있지만 exec는 다른 연결을 열 것이다. 다른 연결을 열지 않으려합니다. – Masoud

관련 문제