5 분 안에 더 나은 SQL 쓰기-동적 SQL 소개

2014 년경에 Sql(Structured Query Language)에 들어가기 시작했을 때 예제를 위해 인터넷을 수색 한 것을 기억합니다. 나는 사람들이”이것은 동적 SQL 을 사용한다”또는”그 스크립트는 동적이다.”예제를 보았지만 새로운 것이기 때문에”동적”으로 만든 구성 요소를 실제로 이해하지 못했습니다. 나는 더 많은 경험을 얻고,현장에서 배웠지 만은 세가지 요소는 동적 SQL 이지만,또한 그것을 적용하는 방법을 다양한 사례입니다., 이 짧은 소개는 sql 초보자 또는 다른 사람이 동적 SQL 의 구성 요소를 더 잘 이해할 수 있도록 설계되었습니다.

데이터에 대한 예

I 옵션을 사용하여 시장 거래에서 사용할 수 있는 데이터글을 경우 관심이 있습니다.

동적 SQL 은 무엇입니까?

응용 프로그램이 복잡해질 수 있지만 동적 SQL 의 정의는 실제로 간단합니다.

동적 SQL 은 런타임에 빌드되는 SQL 문입니다.

이를 통해 범용 쿼리를 작성하고 변수 사용을 통해 즉석에서 실행해야하는 명령문을 구성 할 수 있습니다., 나는이 해체 이 예제의 기본 슈퍼 dynamic SQL 아래

DECLARE @dynamic_sql NVARCHAR(max)select @dynamic_sql = 'select * from orderFlow'EXEC(@dynamic_sql)

반대의 동적 SQL static SQL 는 SQL 문을 변경하지 않을 수 있습니다. 예를 들어:

SELECT * FROM orderFlow

차이를 알 수 있습니까? 정적 SQL 은 execute 명령을 사용하여 실행되거나 변수를 사용하여 빌드되지 않습니다.

세계를 쓰는 Dynamic SQL

를 작성하려는 경우 dynamic SQL,기억하는 세 가지 구성 요소:

  1. 선언한 변수를
    의 생각을 사용하여 변수로는 빌딩 블록에 대한 SQL statement., 이 예제에서는 dynamic_sql 이라는 변수를 선언하고 데이터 유형 nvarchar(max)를 제공했습니다. Max 를 사용하여 SQL 문을 입력 할 수있는 가장 많은 공간을 제공합니다.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construct SQL String
변수 dynamic_sql 에 원하는 SQL 을 입력 할 수 있다는 사실은 처음에는이 예제를 동적 SQL 로 만드는 것의 일부입니다! 테이블의 모든 결과 인 orderFlow 를 반환하고 싶기 때문에 변수를 오류없이 실행할 수있는 간단한 select 문으로 설정했습니다.

select @dynamic_sql = 'select * from orderFlow '

3., Sql 문 실행
2 단계에서 빌드된 문을 실행해야 합니다. EXEC 명령은 일반적으로 사용되는 저장 프로시저를 실행하지만,실행할 수 있습니다 모든 인 SQL 문을 문자열로 저장처럼,하나에 저장된 변수 dynamic_sql.

EXEC(@dynamic_sql)

상상 작업에 사용자 인터페이스가 있는 텍스트 필드할 수 있는 사용자를 입력해 원 SQL 문행하고 그 성명을 클릭할 때 실행됩니다. 비즈니스 인텔리전스 제품에서 비슷한 기능을 사용했습니다!, 이제 몇 가지 동적 SQL 을 알았으므로 무대 뒤에서 어떻게 작동 할 수 있는지 상상하기 쉽습니다.

상상의 사용자 인터페이스

축하합니다! 이제 동적 SQL 의 3 가지 구성 요소를 알고 있습니다!, 예제:

상상을 만들고 사용자 인터페이스는 사용자와 상호 작용하는 데이터,하지만 시키는 대신 그들을 쓰는 순수한 SQL,당신은 그들이 구성하는 성명을 사용하여 드롭 2 나열:

가상 UI2

뒤에, 저장 프로시저를 사용하며 dynamic SQL 에서 SQL 문을 실행에 건설 UI

통지 저장 프로시저를 사용하는 사용자 입력을 채우는 두 변수입니다., 이 변수들은 이미 정의에서 볼 수 있듯이 사용자 인터페이스 모형,저장 프로시저는 단순히 필요로하는 문자열을 구성하고 실행하여 문이 있습니다. 사용자가 프로 시저를 실행할 때 하나를 입력하는 것을 기억할 필요가 없도록 공백을 추가했습니다., 예를 들어:

실행 저장된 절차에서 Microsoft SQL Server 관리 스튜디오

사용한 경우 2:

상상 사용하려면 저장 프로시저를 쿼리 orderFlow 테이블에 대한 특정한 주식 상징:

CREATE PROCEDURE sp_example2 
@stock_symbol NVARCHAR(6) = NullAS
SELECT * FROM orderFlow where sym = @stock_symbol

통지 변수에 사용되는 조항에 사용 사례 2. 그렇게하면 정적 쿼리를 반복해서 사용하지 않고도 주식 기호를 입력하고 결과를 얻을 수 있습니다.,

Running stored procedure in Microsoft SQL Server Management Studios

Results of sp_example2

The Downsides with Dynamic

There can be some downsides to using dynamic SQL., Sql 주입으로 인해 잠재적 인 보안 문제가 발생할 수 있습니다. SQL injection 일반적으로 발생하는 경우 요청할 사용자를 위한 입력 대상과 같이 입력 사용자 이름,사용자가 입력한 SQL 문을 실행하는 데이터베이스에 대한 원인이 예상치 못한 일이 발생합니다. SQL 주입은 심각한 문제를 일으킬 수 있으며 일반적인 해커 기술입니다.실행 계획을 캐시 할 수 없으므로 성능이 또 다른 잠재적 인 관심사가 될 수 있습니다. 이 문제를 해결하는 방법은 저장 프로 시저와 sp_executesql 명령을 사용하는 것입니다(적어도 Microsoft Sql server 에서)., 동적 SQL 문은 빠르게 복잡해질 수 있으며 초보자에게 위협적으로 만드는 디버깅하기가 어려울 수 있습니다.

최종 생각

지만 그것을 할 수 있는 것은 까다로운 또는 지루한,처음에는 dynamic SQL 강력한 기술을 확보할 수 있기 때문에 구축 및 실행 SQL 문을 수 있습니다., Dynamic SQL 세 가지 요소로 구성되어 있

  1. 변수를 선언
  2. 생성 SQL 문자열
  3. SQL 실행

가 될 수 있는 단점을 만들기 같은 코드를 디버깅하기 어렵게,하지만 유연성을 제공할 수 있는 사용자 관심사를 중요 특히 구현하는 경우 적절하게.

SQL 또는 데이터 과학에 대해 더 많이 배우는 데 관심이 있다면 다른 자습서를 확인하십시오.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다