【发布时间】:2016-09-12 21:16:39
【问题描述】:
我有一个封闭源代码的 ASP.NET 系统,它正在调用一个非常昂贵的 SQL 视图:
SELECT TOP 100 PERCENT *
FROM [v]
WHERE [u] = 9999
ORDER BY [ID]
我可以访问数据库,所以我可以更改视图 - 没有简单的方法可以让视图更快。
我想根据正在执行请求的 IIS 服务器以编程方式更改视图的行为。
这可能吗?
例如我想创建一个从视图调用的存储过程,这个存储过程将返回一个模拟当前视图的表,但如果从特定的 IIS 服务器调用将返回不同的东西。
是否可以修改视图以调用存储过程,使 asp.net 代码不需要任何修改?
我可以从其他堆栈溢出文章中看到如何从视图中调用存储过程,但是如何访问存储过程中的 where 子句?
【问题讨论】:
-
“从视图调用存储过程”是什么意思?这对我来说根本没有任何意义。您不会通过使用存储过程而不是视图来神奇地加快速度。您最有可能添加一些适当的索引。请发布表和索引定义,我们可以提供帮助。
-
"选择前 100 %"?这只是愚蠢的开始。您不会从内部视图中调用 procs(因此是之前的评论)。您可以创建一个存储过程并将服务器名称传递给它,然后根据该参数执行不同的选择。但是您仍然需要修改 .NET 代码来调用过程而不是视图。简短的回答,据我所知,您尝试做的事情是不可行的。
-
视图是一种结构化查询,SQL 将其视为类似于表(许多例外),因为它封装了查询的逻辑。您不能调用更改视图结构的 proc(那时它不会是视图),但您可以使用 proc 返回一个按您想要的方式工作的查询。我想问题是你需要持久查询吗?是否有一些需要它的报告工具?另外,关于DDL,下次请咨询MSDN。虽然这个Query vs View 很好
-
一些例外情况适用,但简单地说,视图是一个可重用的查询。
-
返回表类型的用户定义函数。
标签: sql-server tsql