使用变量使用一个SELECT语句对多个表进行SQL查询

使用变量使用一个SELECT语句对多个表进行SQL查询,sql,sql-server,tsql,variables,Sql,Sql Server,Tsql,Variables,我对SQL非常陌生,但给出下面的示例,有没有一种方法可以压缩查询?据我所知,SQL没有数组,但是否有可能以某种方式存储表并执行一个SELECT语句,例如变量SELECT Count*From Table_Name作为Table_Name SELECT (SELECT COUNT(*) FROM ActivityLog) AS ActivityLog, (SELECT COUNT(*) FROM ActivityLogin) AS ActivityLogin, (SELECT COUNT(*) F

我对SQL非常陌生,但给出下面的示例,有没有一种方法可以压缩查询?据我所知,SQL没有数组,但是否有可能以某种方式存储表并执行一个SELECT语句,例如变量SELECT Count*From Table_Name作为Table_Name

SELECT
(SELECT COUNT(*) FROM ActivityLog) AS ActivityLog,
(SELECT COUNT(*) FROM ActivityLogin) AS ActivityLogin,
(SELECT COUNT(*) FROM ActivityPlayContent) AS ActivityPlayContent,
(SELECT COUNT(*) FROM ChangeLog) AS ChangeLog,
(SELECT COUNT(*) FROM ContentApprovalLog) AS ContentApprovalLog,
(SELECT COUNT(*) FROM ExceptionLog) AS ExceptionLog,
(SELECT COUNT(*) FROM State) AS State

如果您经常需要此查询并希望使其更简单,可以创建一个。 然后必须像查询表一样查询视图

SELECT * FROM MyView
当您有多个复杂查询并且希望在其他查询中重用它们时,视图尤其有用,例如,将两个视图连接在一起或子查询一个视图

按如下所示为查询创建视图

CREATE VIEW MyView AS
SELECT
(SELECT COUNT(*) FROM ActivityLog) AS ActivityLog,
(SELECT COUNT(*) FROM ActivityLogin) AS ActivityLogin,
(SELECT COUNT(*) FROM ActivityPlayContent) AS ActivityPlayContent,
(SELECT COUNT(*) FROM ChangeLog) AS ChangeLog,
(SELECT COUNT(*) FROM ContentApprovalLog) AS ContentApprovalLog,
(SELECT COUNT(*) FROM ExceptionLog) AS ExceptionLog,
(SELECT COUNT(*) FROM State) AS State

您可以定义一个存储过程,动态地构造并执行一个SQL字符串查询,就像上面的查询一样,但SQL就是这样工作的。将其动态构造为SP类似于使用并非为itCheck构建的语言进行编程,有不同的方法为表生成计数,您可以选择一种方法并对其进行修改,然后编写一个函数/存储过程来处理您希望计数的表。这一点很好,但它并没有真正回答这个问题?我同意存储过程可以更直接地解决这个问题,但我不想教SQL初学者将所有内容都放在SP中,因为这样做不好。鉴于他的意图是使查询更加精简,视图以一种更智能的方式解决了这个问题。OP的问题是如何编写它而不必提供特定的表名。换句话说,他可能想基于sys.objects编写一些动态的东西——正如@rs评论中的链接所强调的那样。我开始研究存储过程,它似乎类似于可以使用参数调用的C方法。我必须再深入一点。好的,我设置了一个视图和存储过程。这个存储过程有点棘手,而且还不是100%,但我想我明白了。谢谢