来自字段的动态 SQL 具有 table 名称

Dynamic SQL with table name from a field

有没有一种方法可以生成动态 sql 语句,以便来自一个 table 的字段值参与要连接的 table 名称?

这是我正在尝试做的事情:

DECLARE @sql NVARCHAR(MAX) = N''
DECLARE @MainProc NVARCHAR(MAX) = N'dbo.MainProc'

SET @sql += N'SELECT ref.*
FROM sys.dm_sql_referenced_entities (' + @MainProc + N', ''OBJECT'') AS ref
INNER JOIN ' + ref.referenced_database_name + '.sys.objects AS o ON ref.referenced_id = o.object_id AND o.type = ''P''
WHERE ref.referenced_schema_name NOT IN (''system'')'

EXEC sp_executesql @sql

ref.referenced_database_name的值如何附加到sys.objects

是的,稍作重构。在您的原始示例中,您试图在 dm_sql_referenced_entities 查询之前从中提取一个值。

DECLARE @sql        NVARCHAR(MAX) = N''
DECLARE @MainProc   NVARCHAR(MAX) = N'Fact.Account_Load'

/* Builds the sys.Objects query.
 * Can return multiple queries.
 */
SELECT      
    @sql += 
    '
        SELECT
            s.*
        FROM
            ' + QUOTENAME(ref.referenced_database_name) + '.sys.objects AS s
        WHERE
            s.Object_Id = ' + CAST(ref.referenced_id AS VARCHAR(255)) + '
            AND s.Type = ''P''
        ;
    '
FROM
    sys.dm_sql_referenced_entities('Fact.Account_Load', 'OBJECT') AS ref
WHERE
    ref.referenced_database_name IS NOT NULL
GROUP BY
    ref.referenced_database_name,
    ref.referenced_id
;

-- Executes dynamic query.
EXECUTE(@sql);