我有一个封闭的源ASP.NET系统,它调用了一个非常昂贵的SQL视图:
SELECT TOP 100 PERCENT *
FROM [v]
WHERE [u] = 9999
ORDER BY [ID]
我可以访问数据库,因此我可以更改视图 - 没有简单的方法可以让视图更快。
我希望以编程方式根据IIS服务器执行请求来更改视图的行为。
这可能吗?
E.g。我想创建一个将从视图中调用的存储过程,并且此存储过程将返回一个模仿当前视图的表,但是如果从特定的IIS服务器调用将返回不同的内容。
是否可以修改视图以调用存储过程,以便asp.net代码不需要进行任何修改?
我可以从其他堆栈溢出文章中看到如何从视图中调用存储过程,但是如何访问存储过程中的where子句?
答案 0 :(得分:0)
鉴于你的ASP.NET代码可能嵌入了一个Select * From [view]代码而你无法改变它,你有以下障碍:
您需要创建一个多语句表值函数,该函数可以检测您要查询的IIS实例,而无需从应用程序进行任何定制输入(例如,查看用户或服务帐户,IP地址)。使用多语句表值视图的好处是,您实际上可以创建两个单独的Select语句,然后有条件地返回一个或另一个。您也可以在存储过程中执行此操作,但我认为您会发现从视图中调用多语句表值函数比存储过程更简单。
您需要更改视图以从新的多语句表值函数中执行Select *。
<强> 注意事项 强>
当您更改应用程序使用的视图的定义时,您还将更改访问它的任何其他用户或应用程序的视图。 Here是关于如何查看谁使用特定视图以及频率的讨论。我建议您查看是否有任何其他应用程序或报告工具从该视图中提取,因为更改底层代码可能会破坏其他应用程序。