4

SQLServerにアセンブリを登録しています。

CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM  0x4D5A90000300000...
WITH PERMISSION_SET = SAFE

このアセンブリへのパスを見つけるにはどうすればよいですか?

4

2 に答える 2

5

これはSQLServerのアセンブリ参照ではなく、アセンブリは実際にデータベースに読み込まれます。したがって、典型的な「パス」はありません。

SQLPS(PowerShell)パスを探している場合は、次のようになります。

SQLSERVER:\SQL\YourServerName\YourInstanceName\Databases\YourDatabaseName\Assemblies\
于 2012-06-19T14:10:56.870 に答える
2

非推奨の(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.assembliesCREATE ASSEMBLY

一般的なSQLCLRの操作の詳細については、SQLCLR情報を参照してください

于 2020-09-23T14:54:25.150 に答える