如何将存储在字段中的视图名称用于sql查询?

如何将存储在字段中的视图名称用于sql查询?,sql,sql-server,Sql,Sql Server,我有一个带有view_name字段(varchar(256))的表,我希望在sql查询中使用该字段 例如: 表1大学及大学成员 id | type | view | u name | count 1 |教授|观点|教授| 0 2 |学生|查看|学生2 | 0 3 |员工|视图|员工4 | 0 我想用在相应视图上计算的一些聚合来更新所有行(例如。SET count=SELECT count(*)FROM view_) 这可能是一个新手问题,我猜这显然是不可能的,或者是微不足道的。对设计的意见,即此

我有一个带有view_name字段(varchar(256))的表,我希望在sql查询中使用该字段

例如:

表1大学及大学成员

id | type | view | u name | count

1 |教授|观点|教授| 0

2 |学生|查看|学生2 | 0

3 |员工|视图|员工4 | 0

我想用在相应视图上计算的一些聚合来更新所有行(例如
。SET count=SELECT count(*)FROM view_

这可能是一个新手问题,我猜这显然是不可能的,或者是微不足道的。对设计的意见,即此处处理元数据的方式(明确地将DB对象名称存储为字符串)将不胜感激。虽然我无法控制这个设计(因此我必须找到答案),但我猜它并不干净,尽管一些外部限制决定了它,所以为了我个人的利益,我非常感谢社区对这个问题的看法


我使用SQL Server 2005,但欢迎使用跨平台的答案。

要做到这一点,您必须将其作为一种动态SQL来执行,类似的操作可能会奏效,显然您需要进行编辑,以实际匹配您尝试执行的操作

DECLARE @ViewName VARCHAR(500)

SELECT @ViewName = view_name
FROM University_Members
WHERE Id = 1

DECLARE @SQL VARCHAR(MAX)

SET @SQL = '
UPDATE YOURTABLE
SET YOURVALUE = SELECT COUNT(*) FROM ' + @ViewName + '
WHERE yourCriteria = YourValue'

EXEC(@SQL)

在我看来,您可以在VARCHAR(MAX)变量中生成SQL代码,然后使用EXEC关键字执行它。我不知道有什么办法可以像你那样直接做

例如:

DECLARE @SQL VARCHAR(MAX)
SET @SQL = ''
SELECT @SQL = @SQL + 'UPDATE university_members SET count = (SELECT COUNT(*) FROM ' + view_name + ') WHERE id = ' + id + CHAR(10) + CHAR(13) FROM university_members

EXEC @SQL

警告!此代码未经测试。这只是一个提示…

动态SQl是实现这一点的唯一方法,这就是为什么这是一个糟糕的设计选择。如果必须使用动态SQl来保护数据,请阅读以下文章。

正如HLGEM所写,您被迫使用动态SQL这一事实表明设计本身存在问题。我还将指出,在这样的表中存储聚合很可能是另一个糟糕的设计选择

如果您需要在某个点确定一个值,那么在需要时就这样做。试图使这样的计算值与数据保持同步几乎总是充满问题——不准确、额外开销等等

很少有这样的情况需要存储这样的值,或者存储这样的值具有优势,这些情况通常出现在具有极高吞吐量的大型数据仓库或系统中。这不是一所学校或大学可能遇到的问题