다음을 통해 공유


어셈블리 구현

이 항목에서는 사용자가 데이터베이스에서 어셈블리를 구현하고 사용하는 데 도움이 되는 다음 영역에 대해 설명합니다.

  • 어셈블리 만들기

  • 어셈블리 수정

  • 어셈블리 삭제, 해제 및 설정

  • 어셈블리 버전 관리

어셈블리 만들기

어셈블리는 SQL Server에서는 Transact-SQL CREATE ASSEMBLY 문을 사용하여 만들고 SQL Server Management Studio에서는 Assembly Assisted Editor를 사용하여 만듭니다. 또한 Microsoft Visual Studio에서 SQL Server 프로젝트를 배포하면 해당 프로젝트에 대해 지정된 데이터베이스에 어셈블리가 등록됩니다. 자세한 내용은 CLR 데이터베이스 개체 배포를 참조하십시오.

Transact-SQL을 사용하여 어셈블리를 만들려면

SQL Server Management Studio를 사용하여 어셈블리를 만들려면

어셈블리 수정

어셈블리는 SQL Server에서는 Transact-SQL ALTER ASSEMBLY 문을 사용하여 수정하고 SQL Server Management Studio에서는 Assembly Assisted Editor를 사용하여 수정합니다. 다음을 수행할 때 어셈블리를 수정할 수 있습니다.

  • 새로운 버전의 어셈블리 바이너리를 업로드하여 어셈블리 구현을 변경합니다. 자세한 내용은 이 항목의 뒤에 나오는 어셈블리 버전 관리를 참조하십시오.

  • 어셈블리의 권한 집합을 변경합니다. 자세한 내용은 어셈블리 디자인을 참조하십시오.

  • 어셈블리의 표시 여부를 변경합니다. 표시되는 어셈블리는 SQL Server에서 참조할 때 사용할 수 있습니다. 표시되지 않는 어셈블리는 데이터베이스에 업로드했더라도 사용할 수 없습니다. 기본적으로 SQL Server 인스턴스에 업로드된 어셈블리가 표시됩니다.

  • 해당 어셈블리와 관련된 디버그 또는 원본 파일을 추가하거나 삭제합니다.

Transact-SQL을 사용하여 어셈블리를 수정하려면

SQL Server Management Studio를 사용하여 어셈블리를 수정하려면

어셈블리 삭제, 해제 및 설정

어셈블리는 Transact-SQL DROP ASSEMBLY 문이나 SQL Server Management Studio를 사용하여 삭제합니다.

Transact-SQL을 사용하여 어셈블리를 삭제하려면

SQL Server Management Studio를 사용하여 어셈블리를 삭제하려면

SQL Server에서 생성된 어셈블리는 모두 기본적으로 실행할 수 없습니다. sp_configure 시스템 저장 프로시저의 clr enabled 옵션을 사용하여 SQL Server에 업로드된 모든 어셈블리의 실행을 설정하거나 해제할 수 있습니다. 어셈블리 실행을 해제하면 CLR(공용 언어 런타임) 함수, 저장 프로시저, 트리거, 집계 및 사용자 정의 유형이 실행되지 않고 현재 실행 중인 경우 중지됩니다. 어셈블리 실행을 해제하더라도 어셈블리를 만들거나, 변경하거나, 삭제하는 기능은 해제되지 않습니다. 자세한 내용은 clr enabled 옵션을 참조하십시오.

어셈블리 실행을 해제하거나 설정하려면

어셈블리 버전 관리

어셈블리가 SQL Server 인스턴스에 업로드되면 데이터베이스 시스템 카탈로그에 저장되어 이 카탈로그에서 관리됩니다. Microsoft .NET Framework에 있는 어셈블리 정의에 대한 변경 내용은 데이터베이스 카탈로그에 저장되어 있는 어셈블리로 전파되어야 합니다.

어셈블리를 수정해야 할 경우 ALTER ASSEMBLY 문을 실행하여 데이터베이스의 어셈블리를 업데이트해야 합니다. 이렇게 하면 어셈블리가 해당 구현을 보유하고 있는 .NET Framework 모듈의 최신 복사본으로 업데이트됩니다.

ALTER ASSEMBLY 문의 WITH UNCHECKED DATA 절은 SQL Server에 데이터베이스의 지속형 데이터가 종속되어 있는 어셈블리도 새로 고치도록 지시합니다. 특히 다음 중 하나가 존재하는 경우 WITH UNCHECKED DATA를 지정해야 합니다.

  • 어셈블리에서 Transact-SQL 함수나 메서드를 통해 직접 또는 간접적으로 메서드를 참조하는 지속형 계산 열

  • 어셈블리에 종속된 CLR 사용자 정의 유형의 열 - 이 유형은 UserDefined(비네이티브) 직렬화 형식을 구현합니다.

주의 사항주의

WITH UNCHECKED DATA를 지정하지 않으면 새 어셈블리 버전이 테이블, 인덱스 또는 다른 영구 사이트의 기존 데이터에 영향을 주는 경우 SQL Server에서 ALTER ASSEMBLY를 실행하지 못하도록 합니다. 그러나 SQL Server에서 CLR 어셈블리를 업데이트할 때 계산 열, 인덱스, 인덱싱된 뷰 또는 식이 기본 루틴 및 유형과 일치하도록 보장하지는 않습니다. ALTER ASSEMBLY를 실행할 때는 어셈블리에 저장된 이 식을 기반으로 하는 값과 식의 결과가 일치하는지 주의해서 확인하십시오.

db_ownerdb_ddlowner 고정 데이터베이스 역할의 멤버만 WITH UNCHECKED DATA 절을 사용하여 ALTER ASSEMBLY를 실행할 수 있습니다.

SQL Server는 어셈블리가 테이블의 검사하지 않은 데이터로 수정되었다는 메시지를 Windows 응용 프로그램 이벤트 로그에 게시합니다. 그러면 SQL Server는 해당 어셈블리에 종속된 데이터가 들어 있는 테이블에 검사하지 않은 데이터가 있다고 표시합니다. sys.tables 카탈로그 뷰의 has_unchecked_assembly_data 열에는 검사하지 않은 데이터가 포함된 테이블에 대한 값 1과 검사하지 않은 데이터가 없는 테이블에 대한 값 0이 포함되어 있습니다.

검사하지 않은 데이터의 무결성을 확인하려면 검사하지 않은 데이터가 있는 각 테이블에 대해 DBCC CHECKTABLE을 실행합니다. DBCC CHECKTABLE이 실패하면 잘못된 테이블 행을 삭제하거나 어셈블리 코드를 수정하여 문제를 해결한 다음 추가 ALTER ASSEMBLY 문을 실행해야 합니다.

ALTER ASSEMBLY는 어셈블리 버전을 변경합니다. 어셈블리의 culture 및 공개 키 토큰은 동일하게 유지됩니다. SQL Server에서는 이름, culture 및 공개 키는 동일하지만 버전이 다른 어셈블리를 등록할 수 없습니다.

버전 바인딩을 위해 컴퓨터 차원의 정책과 상호 작용

SQL Server에 저장되어 있는 어셈블리에 대한 참조가 게시자 정책 또는 컴퓨터 차원의 관리자 정책을 사용하여 특정 버전으로 리디렉션된 경우에는 다음 중 하나를 수행해야 합니다.

  • 이렇게 리디렉션된 새 버전이 데이터베이스에 있는지 확인합니다.

  • 컴퓨터 또는 게시자 정책의 외부 정책 파일로 문을 수정하여 이러한 파일이 데이터베이스에 있는 특정 버전을 참조하는지 확인합니다.

그렇지 않으면 SQL Server 인스턴스로 새 어셈블리 버전을 로드할 수 없습니다.

어셈블리의 버전을 업데이트하려면