SQL Server - 用存储过程替换视图

时间:2016-09-12 21:16:39

标签: sql-server tsql

我有一个封闭的源ASP.NET系统,它调用了一个非常昂贵的SQL视图:

SELECT TOP 100 PERCENT * 
FROM [v]  
WHERE [u] =  9999 
ORDER BY [ID]

我可以访问数据库,因此我可以更改视图 - 没有简单的方法可以让视图更快。

我希望以编程方式根据IIS服务器执行请求来更改视图的行为。

这可能吗?

E.g。我想创建一个将从视图中调用的存储过程,并且此存储过程将返回一个模仿当前视图的表,但是如果从特定的IIS服务器调用将返回不同的内容。

是否可以修改视图以调用存储过程,以便asp.net代码不需要进行任何修改?

我可以从其他堆栈溢出文章中看到如何从视图中调用存储过程,但是如何访问存储过程中的where子句?

1 个答案:

答案 0 :(得分:0)

鉴于你的ASP.NET代码可能嵌入了一个Select * From [view]代码而你无法改变它,你有以下障碍:

  1. 您需要创建一个多语句表值函数,该函数可以检测您要查询的IIS实例,而无需从应用程序进行任何定制输入(例如,查看用户或服务帐户,IP地址)。使用多语句表值视图的好处是,您实际上可以创建两个单独的Select语句,然后有条件地返回一个或另一个。您也可以在存储过程中执行此操作,但我认为您会发现从视图中调用多语句表值函数比存储过程更简单。

  2. 您需要更改视图以从新的多语句表值函数中执行Select *。

  3. <强> 注意事项

    当您更改应用程序使用的视图的定义时,您还将更改访问它的任何其他用户或应用程序的视图。 Here是关于如何查看谁使用特定视图以及频率的讨论。我建议您查看是否有任何其他应用程序或报告工具从该视图中提取,因为更改底层代码可能会破坏其他应用程序。