Microsoft SQL Server 데이터베이스를 동일한 구조로 동기화하는 응용 프로그램을 만들었습니다. 해결해야 할 작업 중 하나는 소스 데이터베이스에서 대상으로 데이터베이스 루틴 (프로 시저, 함수, 트리거 등)을 전송하는 것입니다. 일상적인 전송을 위해 내가 쿼리를 사용Microsoft SQL Server에서 CLR 기능 텍스트는 어디에서 찾을 수 있습니까?
SELECT [definition] FROM sys.sql_modules WITH (NOLOCK) WHERE object_id = OBJECT_ID('SOME_OBJECT_ID')
또는
SELECT * FROM INFORMATION_SCHEMA.ROUTINES where routine_name like '%SOME_ROUTINE_NAME%'
그리고 그것은 CLR 기능을 제외한 모든 루틴 (
[type_desc] = CLR_TABLE_VALUED_FUNCTION
또는
[type_desc] = CLR_SCALAR_FUNCTION
와 기능)에 대해 완벽하게 작동합니다.
텍스트는 sys.sql_modules
데이터 테이블에 저장되지 않으며 시스템보기 INFORMATION_SCHEMA.ROUTINES
은 [ROUTINE_BODY] = EXTERNAL
및 [ROUTINE_DEFINITION] = NULL
값을 포함합니다.
하지만 CLR 기능 텍스트는 사용자가 변경하면 변경되고 저장 될 수 있기 때문에 열 때마다 다시 만들어지지 않습니다.
그래서 CLR 기능 텍스트 위치에 대한 힌트를 주시면 감사하겠습니다.
업데이트 : .NET 라이브러리 함수 자체를 전송할 필요가 없습니다. 프로그래머 빌리티> 함수> 테이블 반환 함수에서 수동으로 작성한 래퍼 함수를 전송하려고합니다.
CLR 함수는 .NET에서 생성되고 SQL 서버에 등록 된 어셈블리 (dll)입니다. 어셈블리 sys.assemblies에서 목록을 가져올 수 있습니다. 따라서 SQL Server 내에서 CLR 함수에 대한 텍스트 정의를 가져올 수 없습니다. –
@RahulRichhariya, CLR 함수 (= .NET 라이브러리 함수)를 전송하고 싶지 않지만 CLR_TABLE_VALUED_FUNCTION 또는 CLR_SCALAR_FUNCTION - 프로그래밍 가능> 함수> 테이블 반환 함수 목록에서 찾을 수있는 객체에 관한 질문을했습니다. 그리고이 객체를 표준 함수처럼 편집하고 저장할 수 있습니다 (SQL_SCALAR_FUNCTION). – Dmitry
그래서, 'CREATE FUNCTION [dbo]. [len_s] (@str nvarchar (4000)) RETURNS bigint EXTERNAL NAME [SurrogateStringFunction]. [Microsoft.Samples.SqlServer]와 동일한 기능을 생성하려고합니다. .SurrogateStringFunction]. [LenS];'? –