首页=>开发=>SQL Server=>扩大数据库容量:从Access到SQL |
|
|
扩大数据库容量:从Access到SQL |
www.51study.net 2004-11-10 23:37 |
【字体:大 中 小】【评论】【打印】 【关闭】 |
|
|
在Access数据库中,通常把控件中的一行定义为一个字符串。例如,在一个窗体中带有一系列的选择项(这些选择项包括SalesGroup、State/Province/Canton、起始日期、截止日期等等)。Access开发人员将抽样检查这些控件,以查看其中哪些控件为空值,并且建立忽略这些值的SQL语句。 以这一方式连接到SQL 服务器并不合理,主要有以下的原因: 所有的处理程序都在客户端完成,而不是在服务器中完成。 解析这些控件和处理SQL语句的代码将会变得相当繁杂。 这一方法与SQL查询攻击有关。 扩大SQL服务器容量的Access开发人员必须处理两个问题: 1. 识别没有基于名称查询的所有记录和所有行。 2. 使用名称查询取代所有的查询。 当完成这些动态组合查询之后,将显示如下结果: SELECT * FROM SomeTables WHERE ColumnOfInterest = Forms("myForm").ControlOfInterest AND Column2OfInterest = Forms("myForm").Control2OfInterest 简而言之,我们要确保在Access数据库窗体中只有两个控件(但是在这两个主控件背后隐藏许多个控件)。这种Access数据库方法是在代码中分析控件中的值,然后使用非零值来集中动态SQL查询。 这是一项不需要向导就可以容易实现的工作。你所需要的是一个可以接收窗体中所有控件的值的存储程序。例如,假设有两个这样的控件,两个控件的值的变化都可以调用这一存储程序,但是如果其中一个控件的值为零,那么存储程序将有选择性地执行任务。 这有一个小技巧可以完成这一操作:将一个给定的参数指定为NULL。 SELECT * FROM SomeTables WHERE ColumnOfInterest = 12345 OR ColumnOfInterest is NULL 对Access数据库而言,你可以调用存储程序,无论相关控件的值是否为零,都将数据分配给所有的相关控件。 EXEC mySproc Value1, Value2,. . . ValueN 然后,存储程序将按照以上方法处理这些值为零的控件。可以假定存储程序在选择客户。传递一个值(12345),它就返回到一行。相反,传递一个null值,就会跳过OR从句。由于所有的参数为零,将返回到所有行。这里提供一个Northwind范例程序,程序中将告诉你如何运用这一技巧。 CREATE PROCEDURE dbo.OrdersListSproc1 (@OrderDateDateTime) AS SELECT dbo.Orders.* FROM dbo.Orders WHERE (OrderDate < CONVERT(DATETIME, '1996-08-01 00:00:00', 102)) OR (@OrderDate IS NULL) 当然,采用存储程序来取代动态SQL的方法并不一定总是可行的。在很多情况下,这种提高性能的方法还有待于进一步的改进。 |
|
|
【字体:大 中 小】【评论】【打印】 【关闭】 |
|
|
|
相关文章 |
|
|
|