Q&A

  • Stored Procedure에서 Order By를 파라미터로 사용
MS-SQL Server를 사용합니다!

Stored Procedure를 사용하는데 Select 문에 3개의 파라미터를 사용합니다!



2개는 검색일자를 입력 받는데 사용하고 나머지 하나는 Select문의 마지막에

Order By @ORDERFIELD라고 썼습니다!



당연히 위에서 @ORDERFIELD를 CHAR(20)으로 정의하였죠!



그런데 SP를 저장하는데 SQL Server가 검증하는 과정에서 에러 메세지를

보내더라구요!



실제 Column Name 또는 필드가 위피하는 순서를 숫자로 표기하라고 말이죠!

이렇게 하면 누가 못합니까?



SP문장을 필요때마다 클라이언트에서 바꾸면 않되고 파라미터 세개만 던져서

값을 리턴 받아야 하는데 방법이 없네요!



아시는 분 좀 도와주십시오!

1  COMMENTS
  • Profile
    신호성 1999.06.24 19:43
    VMNT 께서 말씀하시기를...

    > MS-SQL Server를 사용합니다!

    > Stored Procedure를 사용하는데 Select 문에 3개의 파라미터를 사용합니다!

    >

    > 2개는 검색일자를 입력 받는데 사용하고 나머지 하나는 Select문의 마지막에

    > Order By @ORDERFIELD라고 썼습니다!

    >

    > 당연히 위에서 @ORDERFIELD를 CHAR(20)으로 정의하였죠!

    >

    > 그런데 SP를 저장하는데 SQL Server가 검증하는 과정에서 에러 메세지를

    > 보내더라구요!

    >

    > 실제 Column Name 또는 필드가 위피하는 순서를 숫자로 표기하라고 말이죠!

    > 이렇게 하면 누가 못합니까?

    >

    > SP문장을 필요때마다 클라이언트에서 바꾸면 않되고 파라미터 세개만 던져서

    > 값을 리턴 받아야 하는데 방법이 없네요!

    >

    > 아시는 분 좀 도와주십시오!







    아마도 아래와 같은 형식으로 사용했을거라 추측이 되는군요.



    CREATE PROCEDURE EXPROCEDUER

    @STARTDATE DATETIME,

    @ENDDATE DATETIME,

    @ORDERFIELD CHAR(20)

    AS







    SELECT CoumnList FROM TABLENAME

    WHERE ColumnA >= @STARTDATE AND ColumnA <= @ENDDATE

    ORDER BY @ORDERFIELD





    GO



    문제는 파라메터 또는 변수가 컬럼명으로 쓰일 수 없기 때문입니다.



    아래와 같이 별도의 변수를 선언한고 SQL문장을 조합한뒤 실행하면 가능합니다.



    DECLARE @SQLSTRING VARCHAR(255)



    SELECT @SQLSTRING = 'SELECT ColumnList FROM TableName WHERE ColumnA >= '

    + '''' + CONVERT(CHAR,@STARTDATE) + ''''

    + ' AND ColumnA <= '

    + '''' + CONVERT(CHAR,@ENDDATE) + ''''

    + ' ORDER BY '

    + @ORDERFIELD



    EXEC(@SQLSTRING)