【发布时间】:2016-12-21 20:39:36
【问题描述】:
我在 SQL Server 中有一个表格,其中列出了报告中的部分。共有三个字段,SectionID(数字自动编号主键)、SectionTitle(报告中部分的标题)和 SourceView(返回报告记录的本地数据库中的视图名称)。
我需要的是一个视图,它包含这三列加上第四列,它显示“SourceView”返回的记录数。 比如:
CREATE myView AS
SELECT
SectionID,
SectionTitle,
SourceView,
myFunction(SourceView) AS RowsInView
FROM
tblBaseData
我认为这很容易通过编写一个函数来接收视图名称并返回行数来实现。我最初的计划是在函数体中构建一些动态 SQL。
CREATE FUNCTION myFunction(@ViewName VARCHAR) RETURNS INT AS
BEGIN
DECLARE @RowCount INT
DECLARE @SQL VARCHAR(200)
SET @SQL = 'SET @RowCount = (SELECT COUNT(*) FROM ' + @ViewName + ')'
EXEC sp_executesql @SQL
RETURN ISNULL(@RowCount, 0)
END
但是,不能在函数中使用 EXEC,因此不能运行动态 SQL,不能使用 EXEC 来运行返回值的过程,也不能查询系统对象,因为 - 虽然这适用于表格 - 不适用于视图。
我尝试了以下方法但没有成功:
How to get the row count for views from a database?
Execute function inside view SQL server
https://msdn.microsoft.com/en-GB/library/ms188655.aspx
Create a function for counting rows from any table
我正在尝试让视图正常工作,因为我需要在网页上显示具有当前记录数的结果,否则我会构建一个表格并定期刷新数据,
我认为我只是使用了错误的方法来解决这个问题。谁能指出我正确的方向?谢谢。
【问题讨论】:
-
对此的基本答案 - 由下面的 strict01 提供,是您可以用返回表变量的过程替换视图。这适用于报告服务和 Web 方法 - 因此,问题解决了。感谢大家的帮助和时间。
标签: sql-server tsql