Microsoft SQL Serverデータベースを同じ構造で同期するアプリケーションを作成しました。私が解決しなければならないタスクの1つは、ソースデータベースからターゲットデータベースに任意のデータベースルーチン(プロシージャ、ファンクション、トリガなど)を転送することです。ルーチン転送のために私は、クエリ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 - Programmability> Functions> Table-valued関数リストにあるオブジェクトについて質問しました。また、標準機能(SQL_SCALAR_FUNCTION)のようにこのオブジェクトを編集して保存することができます。 – Dmitry
したがって、たとえばCREATE FUNCTION [dbo]。[len_s](@str nvarchar(4000))の同等のものを生成しようとしています。 RETURNS bigint EXTERNAL NAME [SurrogateStringFunction]。[Microsoft.Samples.SqlServer .SurrogateStringFunction]。[LenS]; '? –