SQLServerにアセンブリを登録しています。
CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000...
WITH PERMISSION_SET = SAFE
このアセンブリへのパスを見つけるにはどうすればよいですか?
SQLServerにアセンブリを登録しています。
CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000...
WITH PERMISSION_SET = SAFE
このアセンブリへのパスを見つけるにはどうすればよいですか?
これはSQLServerのアセンブリ参照ではなく、アセンブリは実際にデータベースに読み込まれます。したがって、典型的な「パス」はありません。
SQLPS(PowerShell)パスを探している場合は、次のようになります。
SQLSERVER:\SQL\YourServerName\YourInstanceName\Databases\YourDatabaseName\Assemblies\
非推奨の(SQLCLRを導入したSQL Server 2005のリリースの時点で)拡張ストアドプロシージャAPI /機能(つまりXP)は、外部DLLを指していました。これは、それらが削除される可能性があり、データベースのバックアップに含まれていなかったことを意味します。SQLCLRを使用すると、アセンブリはデータベースにインポートされ、を介してアクセスできますsys.assembly_files
。アセンブリをデータベースに含めることで、それらがすべてのDBバックアップに含まれることが保証されます(魔法のように消えたり、知らないうちに置き換えられたりしないという他の利点もあります)。
以下を実行して、ロードしたアセンブリ、それらの元のパス(VARBINARY
リテラル/ 16進バイトからではなく、外部DLLからロードされた場合のみ)、およびそれらの完全な内容/バイトを確認します。
SELECT asm.[name] AS [Assembly], afl.[name] AS [PathOrAltName], afl.[content]
FROM sys.assembly_files afl
INNER JOIN sys.assemblies asm
ON asm.[assembly_id] = afl.[assembly_id]
ORDER BY asm.[name];
アセンブリがVARBINARY
リテラル/16進バイト(つまり0x4D5A9000...
)からロードされた場合、の[name]
列はの列(ステートメントで使用される名前)sys.assembly_files
と同じである必要があります。[name]
sys.assemblies
CREATE ASSEMBLY
一般的なSQLCLRの操作の詳細については、SQLCLR情報を参照してください。