이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11240|회답: 0

[출처] 일반적인 SQL 문은 exec 명령어로 실행할 수 있습니다

[링크 복사]
게시됨 2015. 2. 9. 오후 2:44:30 | | |
1: 일반 SQL 문은 exec 명령어로 실행할 수 있습니다

tableName에서 * 선택
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- 문자열 앞에 N을 반드시 추가해야 합니다

2: 필드 이름, 테이블 이름, 데이터베이스 이름 등을 변수로 사용할 때는 동적 SQL을 사용해야 합니다

@fname 바르차르(20) 선언
set @fname = 'FiledName'
tableName -- Error에서 @fname을 선택하세요. 오류가 뜨지 않지만, 결과는 고정값인 FiledName이 되어 원하는 바가 아닙니다.
exec('select ' + @fname + ' from tableName') -- 플러스 부호 앞뒤에 인용 부호 옆에 공백이 추가된다는 점에 유의하세요

물론, 문자열을 변수 형태로 바꿀 수도 있습니다
@fname 바르차르(20) 선언
set @fname = 'FiledName' -필드 이름을 설정하세요

@s 바르차르(1000) 선언
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 성공
exec sp_executesql @s -- 이 문장은 오류를 보고합니다

@s Nvarchar(1000)라고 선언하라 — 여기서는 nvarchar(1000)로 변경됨을 참고하세요.
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 성공
임원 sp_executesql @s -- 이 문장이 맞습니다

3. 출력 매개변수
@num int, @sqls nvarchar(4000) 선언
set @sqls='table Name에서 count(*) 선택
임원(@sqls)

--실행 결과를 변수에 어떻게 넣나요?

@num int, @sqls nvarchar(4000) 선언
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
선택 @num


1: 일반 SQL 문은 Exec으로 실행할 수 있습니다. 예시: tableName에서 * 선택
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- 문자열 앞에 N을 추가해야 한다는 점에 유의하세요

2: 필드 이름, 테이블 이름, 데이터베이스 이름 등을 변수로 사용할 때는 동적 SQL을 사용해야 합니다

    오류: @fname varchar(20) 선언
                set @fname = 'FiledName'
                tableName -- Error에서 @fname을 선택하세요. 오류가 뜨지 않지만, 결과는 고정값인 FiledName이 되어 원하는 바가 아닙니다.
    정답: Exec('select ' + @fname + ' from tableName') -- 플러스 부호 앞뒤에 단일 따옴표 옆에 공백이 추가된 것을 주목하세요

    물론, 문자열을 변수 형태로 바꿀 수도 있습니다
                @fname 바르차르(20) 선언
                set @fname = 'FiledName' -필드 이름을 설정하세요

                @s 바르차르(1000) 선언
                set @s = 'select ' + @fname + ' from tableName'
                임원(@s) -- 성공
                exec sp_executesql @s -- 이 문장은 오류를 보고합니다

              --참고: @s 매개변수는 ntext 또는 nchar 또는 nvarchar 유형이어야 하며, varchar(1000)를 선언@s nvarchar(1000)로 변경해야 @s



               다음과 같습니다:
                @s Nvarchar(1000)라고 선언하라 — 여기서는 nvarchar(1000)로 변경됨을 참고하세요.

                set @fname = 'FiledName' -필드 이름을 설정하세요
                set @s = 'select ' + @fname + ' from tableName'
                임원(@s) -- 성공   
                임원 sp_executesql @s -- 이 문장이 맞습니다

3. 입력 또는 출력 매개변수

      (1) 입력 매개변수:
          nvarchar(1000) @QueryString 선언 -- 동적 쿼리 진술 변수 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
          nvarchar(200) 선언 @paramstring - 동적 문에서 매개변수 문자열을 설정하세요 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
          @input_id int 선언 - 동적 문장에 전달할 매개변수의 값을 정의합니다

          Set @QueryString='Select* from tablename, 여기서 id=@id' -id는 필드 이름, @id는 전달할 매개변수입니다
          set @paramstring='@id int' -- 동적 문장에서 매개변수를 정의하는 문자열을 설정합니다
          Set @input_id =1 -- 동적 문에서 전달할 매개변수의 값을 1로 설정합니다
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          매개변수가 여러 개 있을 경우:
          nvarchar(1000) @QueryString 선언 -- 동적 쿼리 진술 변수 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
          nvarchar(200) 선언 @paramstring - 동적 문에서 매개변수 문자열을 설정하세요 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
          Declare @input_id int - 동적 문장에 전달할 매개변수 값을 정의하며, 매개변수 1
          Declare @input_name varchar(20) - 동적 문장에 전달할 인수의 값을 정의하며, 매개변수 2

          set @QueryString='select * from tablename (id=@id 및 name=@name' -id와 name은 필드 이름이며, @id와 @name는 전달할 매개변수입니다
          Set @paramstring='@id int,@name varchar(20)' -- 동적 문장에서 매개변수 정의 문자열을 ","로 구분하여 설정합니다
          Set @input_id =1 -- 동적 문에서 전달할 매개변수의 값을 1로 설정합니다
          set @input_name='Zhang San' -동적 문에서 전달할 매개변수의 값을 'Zhang San'으로 설정합니다.
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- 인수 순서를 주목하세요
     (2) 출력 매개변수
             @num int, @sqls nvarchar(4000) 선언
            set @sqls='table Name에서 count(*) 선택
            임원(@sqls)
        --실행 결과를 변수에 어떻게 넣나요?         
        nvarchar(1000) 선언 @QueryString -- 동적 쿼리 이름 변수 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
        nvarchar(200) 선언 @paramstring - 동적 문에서 매개변수 문자열을 설정하세요 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
        @output_result int를 선언하면 쿼리 결과가 @output_result에 할당됩니다

        Set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 는 출력 매개변수입니다
        Set @paramstring='@totalcount int output' -동적 명단의 매개변수에 의해 정의된 문자열을 ","로 구분하여 설정합니다
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result 출력
        선택 @output_result
        물론 입력과 출력 파라미터를 함께 사용할 수 있으니 직접 시도해볼 수 있습니다.
        또한, 동적 문 쿼리의 결과 집합을 출력하고 싶다면, 임시 테이블을 사용하는 다음 방법만 생각해요. 더 나은 방법이 있는지는 모르겠네요.
        IF object_id('[tempdb].[ dbo].#tmp')가 null이 아니라는 점 -- 임시 테이블이 존재하는지 확인하고, 존재한다면 삭제하세요 #tmp
            드롭 테이블 #tmp
        tablename에서 *를 #tmp로 선택하고, 여기서 1=2 -- tablename과 동일한 구조로 임시 테이블 #tmp을 생성합니다

        nvarchar(1000) 선언 @QueryString -- 동적 쿼리 이름 변수 (참고: ntext 또는 nchar nvarchar 타입이어야 하며, varchar 타입이 아님)
        Set @QueryString='테이블 이름에서 * 선택 '
        #tmp(field1, field2,...) exec(@querystirng) 삽입




이전의:테이블 데이터 비우기 SQL 메서드
다음:최근 며칠간의 SQL 노트
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com