在ASP.NET 2.0中操作数据六十九:处理计算列
导言:
Microsoft SQL Server中有一个计算列。此列的值由表达式计算,表达式引用同一表中其他列的值。例如,有一个ServiceLog表,其中包含serviceperformed、employeeid、rate、Duration等列。虽然我们可以计算网页或任何其他界面中每个服务的成本(即费率乘以持续时间),但我们也可以手动在ServiceLog表中添加AmountDue列来反映这些信息。我们可以将此列创建为普通列。只有当“速率”或“持续时间”列的值发生变化时,才需要更新“到期金额”列的值。更好的方法是将AmountDue列创建为计算列,使用的表达式是Rate * Duration。这样,当在查询中引用AmountDue列时,SQL Server可以自动计算该列的值。
由于计算列的值由表达式决定,因此它是只读的,不能在INSERT或UPDATE语句中赋值。但是,对于使用即席SQL语句的TableAdapter,如果计算列在主查询中被引用,则自动生成的INSERT和UPDATE语句将自动引用计算列。因此,我们必须更新TableAdapter的INSERT和UPDATE查询,以及InsertCommand和UpdateCommand属性,以便删除对任何计算列的引用。
如果我们使用即席SQL语句在TableAdapter中使用计算列,我们将面临的挑战之一是,当TableAdapter安装向导完成时,将自动生成TableAdapter的INSERT和UPDATE查询,并且计算列将再次被自动引用。但是,如果TableAdapters使用存储过程,就不会出现这个问题。
在本文中,我们将向Northwind数据库的Suppliers表中添加一个计算列,然后创建一个TableAdapter来处理该表和计算列。我们将在TableAdapter中使用存储过程,而不是临时SQL语句。
步骤1:将计算列添加到“供应商”表中。
在本文中,我们将向“供应商”表中添加一个名为FullContactName的计算列,该列以“联系人姓名(联系人姓名、公司名称)”的格式返回联系人的姓名、职务和公司。
打开服务器资源管理器,右键单击“供应商”表,选择“打开表定义”,将显示表中包含的列及其属性,如数据类型、是否允许空值等。要添加计算列,只需在表定义中键入表的名称。接下来,在“列属性”窗口的“计算列规格”部分的(公式)文本框中输入表达式(如图1所示)。将计算列命名为FullContactName,并使用以下表达式:
联系人姓名'('如果联系人姓名不为空,则为联系人姓名','否则为'公司名称')'请注意,运算符" "可用于连接SQL中的字符串。CASE声明类似于传统编程语言中的条件语句。上面代码中的CASE声明可以理解为:如果ContactTitle不为NULL,那么输出ContactTitle值,后面加逗号;如果为空,则没有操作。请参考第《The Power of SQL CASE Statements》条(http://www.4guysfromrolla.com/webtech/102704-1.shtml),了解更多关于案例陈述的信息。
注意:除了CASE声明,我们还可以使用ISNULL(ContactTitle ' ')。语法为空(检查表达式,替换值)
版权声明:在ASP.NET 2.0中操作数据六十九:处理计算列是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。