database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5885 게시물 읽기
No. 5885
mssql function 만들 때 에러
작성자
기모노데쓰(kimono)
작성일
2011-05-11 10:58ⓒ
2011-05-11 11:06ⓜ
조회수
8,901

CREATE FUNCTION FC_LIST ( @list_type nvarchar(10), @uid bigint, @start_number smallint, @end_number smallint )

RETURNS TABLE

AS

           BEGIN

                       DECLARE @type nvarchar(10)

                       DECLARE @user_type nvarchar(25)

                       BEGIN

                                 SET @user_type = "aa"

                       END

                       IF @list_type = "a"

                              BEGIN

                                  SET @type = "a"

                             END

                      ELSE IF @list_type = "b"

                             BEGIN

                                    SET @type = "b"

                                    SET @user_type = "bb"

                            END

                       ELSE IF @list_type = "c"

                              BEGIN

                                       SET @type = "c"

                              END

                        ELSE IF @list_type = "d"

                              BEGIN

                                        SET @type = "d"

                               END

               END

               SELECT * FROM

                      (

                         SELECT ee, ff

                         FROM table

                         WHERE type = @type

                        IF @list_type = "a"

                                   AND ( ee= '@uid' OR ff = '@uid')

                        ELSE

                                 AND @user_type = '@uid'

                        END

                        GROUP BY ee, ff ) a

                        WHERE row_number between @start_number and @end_number

                        ORDER BY a.ee DESC END GO

 

 위처럼 function만들 때 뭐가 잘못됐는지 계속 에러가 납니다..

에러메세지는.(빨강으로 표시한 부분)

키워드 'BEGIN' 근처의 구문이 잘못되었습니다.


키워드 'END' 근처의 구문이 잘못되었습니다.


IF 문 근처의 구문이 잘못되었습니다.

 

아시는 분 도와주세요 ㅠㅠㅠ

이 글에 대한 댓글이 총 3건 있습니다.

                         WHERE type = @type

                        IF @list_type = "deleted"

                                   AND ( ee= '@uid' OR ff = '@uid')

                        ELSE

                                 AND @user_type = '@uid'

                        END

 

 WHERE type = @type

   AND ( (@list_type = 'deleted' AND (ee = '@uid' OR ff = '@uid'))

      OR (@list_type <> 'delteed' AND @user_type = '@uid')

       )

知音(sunnylee72)님이 2011-05-11 11:11에 작성한 댓글입니다.
이 댓글은 2011-05-11 11:12에 마지막으로 수정되었습니다.

 知音(sunnylee72)님 답변 감사드립니다.

올려주신 대로 수정하면 

키워드 'BEGIN' 근처의 구문이 잘못되었습니다.

키워드 'GROUP' 근처의 구문이 잘못되었습니다.


라고 나옵니다.. BEGIN이 왜 저러는걸까요..

기모노데쓰(kimono)님이 2011-05-11 11:26에 작성한 댓글입니다.

아래와 같이 변경하니 펑션이 생성은 되네요. 필요한 부분 수정하셔서 사용하세요.

@type과 @user_type은 밖에서 값을 주는 것으로 바꾸었구요.

row_number은 테이블에 없는 컬럼이라는 오류가 나서 row_number()over()를 이용하여 계산된 값으로 변경하였습니다.

 

SAMPLE 참고 : http://msdn.microsoft.com/en-us/library/ms186755.aspx

 

 

CREATE FUNCTION [dbo].[FC_LIST] ( @list_type    nvarchar(10)
                        , @type         nvarchar(10)
                        , @user_type    nvarchar(25)
                        , @uid          bigint
                        , @start_number smallint
                        , @end_number   smallint
                        )
    RETURNS TABLE
AS
RETURN (
        SELECT TOP (@end_number - @start_number + 1)
               ee
             , ff
          FROM (
                 SELECT ee
                      , ff
                      , row_number()over(order by ee desc) rn
                   FROM [table]
                  WHERE [type] = @type
                    AND ( (@list_type = 'deleted' AND (ee = @uid OR ff = @uid))
                       OR (@list_type <> 'delteed' AND @user_type = @uid)
                        )
                  GROUP BY ee, ff
               ) a
         WHERE rn between @start_number and @end_number
         ORDER BY ee DESC
       );

知音(sunnylee72)님이 2011-05-12 16:00에 작성한 댓글입니다.
이 댓글은 2011-05-12 16:44에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
5889급하게구합니다. mssql2000관리도구 도와주세요
김길동
2011-05-17
6201
5888ms-sql 질문 [1]
손헌희
2011-05-17
5832
5886생일인사람에게 쿠폰주기 [1]
이종웅
2011-05-12
6930
5885mssql function 만들 때 에러 [3]
기모노데쓰
2011-05-11
8901
5884mssql돌아가는데 에터프라이즈관리 프로그램? [4]
김길동
2011-05-10
6825
5882int형식으로 저장된 datetime값을 datetime형식으로 나타내고 싶을 때... [1]
이은규
2011-05-02
6241
5881동일한 디비 환경 구성 질문드립니다. [1]
mssql
2011-04-29
6205
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다