使用 INNER JOIN 的动态 SQL 查询

Dynamic SQL Query using INNER JOIN

这是根据主题中的建议更新的查询:

DECLARE
    @table      sysname,
    @sql        nvarchar(max),
    @dbname     sysname;

SELECT @dbname = MAX(dbname) 
FROM ACVSCore.dbo.ACVSUJournalVolumeManagement.dbname
WHERE ACVSCore.dbo.ACVSUJournalVolumeManagement LIKE '%ACVSUJournal%';

SELECT @table = N'.dbo.ACVSUJournalLog';

SET @sql = N'SELECT 
    ap.LastName as [Last Name],
    ap.FirstName as [First Name],
    ap.Text1 as [Company],
    ap.Text2 as [Employee ID],
    tn.ObjectName2 as [Door Name],
    MIN(tn.ServerUTC) AS [ServerUTC]
FROM ' + @dbname + @table + N' tn 
INNER JOIN 
    ACVSCore.Access.Personnel ap on tn.objectidentity1 = 
    ap.GUID
WHERE
    ap.PersonnelTypeID = ''2'' and tn.MessageType
    = ''CardAdmitted'' and tn.ServerUTC >= DATEADD(day, -1, GETDATE())
GROUP BY
    ap.Text1, ap.LastName, ap.FirstName, ap.Text2, tn.ObjectName2
ORDER BY 
    ap.Text1'
EXECUTE
    sp_executesql @sql;

我编辑了查询以反映建议的更改,现在可以正常使用了。再次感谢!

不要在别名中使用 '

SET @sql = N'SELECT 
    ACVSCore.Access.Personnel.LastName as [Last Name],
    ACVSCore.Access.Personnel.FirstName as [First Name],
    ACVSCore.Access.Personnel.Text1 as [Company],
    ACVSCore.Access.Personnel.Text2 as [Employee ID],
    dbo.ACVSUJournalLog.ObjectName2 as [Door Name],
    MIN(dbo.ACVSUJournalLog.ServerUTC) AS [ServerUTC]
FROM ' + @dbname + @table

这是我[编辑:最新] 尝试修复拼写错误

DECLARE
  @table      sysname,
  @sql        nvarchar(max),
  @dbname     sysname;

select @dbname = MAX(dbname) 
from ACVSCore.dbo.ACVSUJournalVolumeManagement 
where ACVSCore.dbo.ACVSUJournalVolumeManagement LIKE '%ACVSUJournalLog%';

select @table = N'.dbo.ACVSUJournalLog';

SET @sql = N'SELECT 
    ap.LastName as [Last Name],
    ap.FirstName as [First Name],
    ap.Text1 as [Company],
    ap.Text2 as [Employee ID],
    tn.ObjectName2 as [Door Name],
    MIN(tn.ServerUTC) AS [ServerUTC]
FROM ' + @dbname + @table + N' tn 
INNER JOIN 
    ACVSCore.Access.Personnel ap on tn.objectidentity1 = 
    ap.GUID
WHERE
    ap.PersonnelTypeID = ''2'' and tn.MessageType
     = ''CardAdmitted'' and tn.ServerUTC >= DATEADD(day, -1, GETDATE())
GROUP BY
    ap.Text1, ap.LastName, ap.FirstName, ap.Text2, tn.ObjectName2
ORDER BY 
    ap.Text1'
EXECUTE
    sp_executesql @sql;