我創建了一個應用程序來同步具有相同結構的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的問題 - 可在Programmability> Functions> Table-valued Functions函數列表中找到的對象。您可以像編輯任何標準函數(SQL_SCALAR_FUNCTION)一樣編輯和保存此對象。 – Dmitry
因此,您試圖生成「CREATE FUNCTION [dbo]」。[len_s](@str nvarchar(4000)) RETURNS bigint AS EXTERNAL NAME [SurrogateStringFunction]。[Microsoft.Samples.SqlServer 。.SurrogateStringFunction] [透鏡];'? –