다음을 통해 공유


방법: CLR 데이터베이스 개체 작업

Transact-SQL 프로그래밍 언어뿐만 아니라 .NET Framework 언어를 사용하여 데이터를 검색 및 업데이트하는 데이터베이스 개체를 만들 수 있습니다. 관리 코드로 작성된 데이터베이스 개체를 SQL Server CLR(공용 언어 런타임) 데이터베이스 개체라고 합니다. SQL Server에서 호스트되는 CLR 데이터베이스 개체를 사용할 경우의 이점과 Transact-SQL 및 CLR 중에서 선택하는 방법은 CLR 통합의 장점관리 코드를 사용하여 데이터베이스 개체를 만드는 경우의 이점을 참조하세요.

SQL Server Data Tools를 사용하여 CLR 데이터베이스 개체를 만들려면 데이터베이스 프로젝트를 만든 다음 CLR 데이터베이스 개체를 추가합니다. 이전 버전의 Visual Studio와 달리 별도의 CLR 프로젝트를 만든 다음 데이터베이스 프로젝트에서 참조를 추가할 필요가 없습니다. 데이터베이스 프로젝트를 빌드하고 게시할 때 프로젝트에 CLR 개체를 동시에 자동으로 게시합니다. 이러한 CLR 개체를 게시한 후에는 다른 데이터베이스 개체처럼 호출하고 실행할 수 있습니다.

CLR 및 CLR 빌드 속성 페이지에는 프로젝트에서 CLR 데이터베이스 개체를 사용하기 위한 여러 설정이 포함되어 있습니다. 특히 CLR 속성 페이지에는 CLR 어셈블리에 대한 사용 권한을 설정할 수 있는 권한 수준 설정이 있습니다. 또한 이 페이지에는 프로젝트에 추가된 CLR 데이터베이이스 개체에 대한 DDL을 생성할지 여부를 제어하는 “DDL 생성” 설정도 있습니다. CLR 빌드 속성 페이지에는 프로젝트에서 CLR 코드의 컴파일을 구성하기 위해 설정할 수 있는 모든 컴파일러 옵션이 포함되어 있습니다. 이러한 속성 페이지는 솔루션 탐색기의 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택하여 액세스할 수 있습니다.

CLR 데이터베이스 개체의 디버깅을 사용하도록 설정하려면 SQL Server 개체 탐색기 엽니다. 디버그하려는 CLR 데이터베이스 아티팩트를 포함한 서버를 마우스 오른쪽 단추로 클릭하고 SQL/CLR 디버깅 허용을 선택합니다. 다음 경고와 함께 메시지 상자가 나타납니다. "디버깅하는 동안 서버의 모든 관리되는 스레드가 중지됩니다. 이 서버에서 SQL/CLR 디버깅을 사용하도록 설정하시겠습니까?" CLR 데이터베이스 개체를 디버깅할 때 실행 중단은 서버의 모든 스레드를 중단하여 다른 사용자에게 영향을 줍니다. 따라서 프로덕션 서버에서 CLR 데이터베이스 개체에 대한 애플리케이션을 디버그해서는 안 됩니다. 또한 디버깅을 시작한 후에는 SQL Server 개체 탐색기 설정을 변경하기에는 너무 늦었습니다. SQL Server 개체 탐색기 변경 내용은 다음 디버깅 세션이 시작될 때까지 적용되지 않습니다.

CLR 데이터베이스 개체 빌드 요구 사항에 대한 자세한 내용은 CLR(공용 언어 런타임) 통합을 사용하여 데이터베이스 개체 빌드를 참조하세요.

Warning

다음 절차에서는 프로젝트 지향 오프라인 데이터베이스 개발 섹션의 이전 절차에서 만든 엔터티를 사용합니다.

프로젝트에 CLR 데이터베이스 개체를 추가하려면

  1. 솔루션 탐색기에서 TradeDev 데이터베이스 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 후 새 항목를 선택합니다.

  2. C# SQL CLR 템플릿을 선택한 다음, SQL CLR 사용자 정의 함수를 선택합니다. 기본 이름을 적용하고 추가를 선택합니다.

  3. 클래스 본문에 다음 코드를 추가합니다. 이 함수는 미국 전화 번호의 유효성을 검사합니다. 미국 전화 번호는 선택적으로 괄호로 묶은 3자리 숫자, 3자리 숫자 집합 및 4자리 숫자 집합 순으로 구성해야 합니다. 예를 들어 (425) 555-0123, 425-555-0123, 425 555 0123 및 1-425-555-0123 같은 형식이 지원됩니다.

    
    [SqlFunction(IsDeterministic = true, IsPrecise = true)]  
    public static SqlBoolean validatePhone(SqlString phone)  
    {  
        string aNorthAmericanPhoneNumberPattern = @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$";  
        if (!phone.IsNull)  
        {  
           Regex regex = new Regex(aNorthAmericanPhoneNumberPattern);  
           return regex.IsMatch(phone.Value);  
        }  
        return true;  
     }  
    
  4. Regex는 빨간색으로 밑줄이 그어져 있습니다. 마우스 오른쪽 단추로 Regex를 클릭하고 해결을 선택한 다음 System.Text.RegularExpressions를 사용합니다.

  5. Microsoft SQL Server 2012 서버 인스턴스에 대해 개발하는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않은 경우 SQL Server 2005 및 SQL Server 2008에서는 .NET Framework 버전 2.0, 3.0 또는 3.5로 작성된 데이터베이스 프로젝트만 지원합니다. .NET 대상 플랫폼이 제대로 설정되어 있는지 확인하려면 솔루션 탐색기에서 TradeDev 데이터베이스 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. SQLCLR 속성 페이지에서 대상 플랫폼.NET Framework 3.5 이하로 변경합니다. 마지막 화면에서 예를 선택하여 프로젝트를 닫고 다시 엽니다.

  6. TradeDev를 마우스 오른쪽 단추로 클릭하고 빌드를 선택하여 프로젝트를 빌드합니다.

  7. Suppliers.sql을 두 번 클릭하고 디자이너 보기를 선택하여 테이블 디자이너에서 Suppliers 테이블을 엽니다.

  8. 열 표의 빈 행을 선택하여 테이블에 새 열을 추가합니다. 이름 필드에 phone을 입력하고 데이터 형식nvarchar (128)을 입력한 후 Null 허용 필드를 선택된 상태로 둡니다.

  9. 컨텍스트 창에서 CHECK 제약 조건 노드를 마우스 오른쪽 단추로 클릭하고 새 CHECK 제약 조건 추가를 선택합니다.

  10. 스크립트 창에서 제약 조건의 기본 정의를 다음과 같이 바꿉니다.

    CONSTRAINT [CK_Suppliers_CheckPhone] CHECK (dbo.validatePhone(phone)=1),  
    

    이렇게 하면 새 phone 필드에 입력하는 모든 내용이 이전에 추가한 CLR UDF를 사용하여 검사됩니다.

  11. F5 키를 눌러 프로젝트를 빌드하고 로컬 데이터베이스에 배포합니다.

CLR 데이터베이스 개체 사용 방법

  1. SQL Server 개체 탐색기에서 프로젝트를 배포할 로컬 데이터베이스로 이동합니다.

  2. 기본적으로 SQL Server에서는 CLR 통합이 해제됩니다. CLR 데이터베이스 개체를 사용하려면 CLR 통합을 사용하도록 설정해야 합니다. 이렇게 하려면 sp_configure 저장 프로시저의 "clr enabled" 옵션을 사용합니다. 자세한 내용은 clr 사용 옵션 문서를 참조 하세요.

    데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다. 쿼리 창에서 다음 코드를 붙여넣고 쿼리 실행 단추를 누릅니다.

    
    sp_configure 'clr enabled', 1;  
    GO  
    RECONFIGURE;  
    GO  
    
  3. Suppliers 테이블을 마우스 오른쪽 단추로 클릭하고 데이터 보기를 선택합니다.

  4. ID5를 입력하고, 이름Contoso를 입력한 뒤, 주소 필드를 비워둔 다음, 전화425 3122 1222를 입력합니다. 전화 필드에서 탭을 떼면 INSERT 문이 기존 검사 제약 조건과 충돌함을 나타내는 메시지가 표시되는데, 이는 미리 정의된 전화 패턴을 사용하여 전화 필드의 입력을 검사하는 것입니다.

  5. 입력 내용을 425 312 1222로 변경하고 Tab 키를 눌러 이동합니다. 이번에는 입력이 수락되는 것을 확인합니다.

참고 항목

CLR 통합의 장점
관리 코드를 사용하여 데이터베이스 개체를 만드는 경우의 이점
CLR(공용 언어 런타임) 통합을 사용하여 데이터베이스 개체 작성