【发布时间】:2021-10-10 15:21:42
【问题描述】:
这是根据线程中的建议更新的查询:
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;
我编辑了查询以反映建议的更改,现在它可以正常工作了。再次感谢!
【问题讨论】:
-
不要对别名使用字符串文字,这个问题实际上消失了;无论如何,在我看来这是一个坏习惯,因为它会让一些人感到困惑。
-
还有3+ part naming on Columns will be Deprecated;给您的对象起别名并以此方式限定您的列。
-
@SteveC 注意,标准方式是
" -
ACVSCore.dbo.ACVSUJournalVolumeManagement.dbname后面为什么有个逗号? -
好像有很多错别字
标签: sql sql-server tsql inner-join dynamic-sql