SQL Server 2016 - 通过数据库名称获取 sys.assembly_files

SQL Server 2016 - Get sys.assembly_files by database name

我有一个数据库,其中添加了 .Net CLR 程序集。

当我通过选择特定数据库执行以下查询时,我在结果中得到了程序集。

SELECT * FROM sys.assembly_files

但是当我通过选择任何其他数据库(如 master)来执行上述相同的查询时,我没有在结果中得到程序集。

有没有办法通过选择 master 数据库并在包含该程序集的查询中传递其他数据库名称来获取结果中的程序集?

您使用

SELECT <cols> FROM database_name.sys.assembly_files;

动态执行(或循环执行,或其他):

DECLARE @dbname sysname,
        @exec nvarchar(1000);

SET @dbname = N'database_name';
SET @exec = QUOTENAME(@dbname) + N'.sys.sp_executesql';

EXEC @exec N'SELECT DB_NAME(), <cols> FROM sys.assembly_files;';

输入 phone,如有错别字,敬请谅解。

根据您要执行的操作,这里有一些 powershell,可以获取所有用户数据库中所有 (non-system) 程序集的所有文件的详细信息:

$s = Connect-DbaInstance -SqlInstance .;

foreach ($db in $s.Databases) {
   foreach ($a in $db.Assemblies | where IsSystemObject -eq $false) {
      $a.SqlAssemblyFiles;
   }
}

我正在使用 dbatools 中的 Connect-DbaInstance 来获取 SMO 服务器对象,但欢迎您按照自己的意愿进行操作。