科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道解析:INSTEAD OF触发器的表达式和计算列

解析:INSTEAD OF触发器的表达式和计算列

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

视图上的 INSTEAD OF 触发器必须具有相应的逻辑,能够正确地确定 INSERT 和 UPDATE 触发器上指定的值中哪些值必须设置到基表中的列。

作者:赛迪网 xiaoqiao 来源:天新网 2008年3月27日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

视图的选择列表可以包含除简单表达式(仅由一个列名构成)以外的其它表达式。这些视图上的 INSTEAD OF 触发器必须具有相应的逻辑,能够正确地确定 INSERT 和 UPDATE 触发器上指定的值中哪些值必须设置到基表中的列。此类表达式的示例包括:

◆不映射到任何表中任何列的视图表达式,如常数或某些类型的函数。

◆映射到多列的视图表达式,如由两个或更多列的串联字符串组成的复杂表达式。

◆转换单个基表列的值的视图表达式,如引用函数中的列。

这些情况还适合作为简单表达式的视图列,这些视图列引用基表中的计算列。定义计算列的表达式可与视图选择列表中的更复杂表达式具有相同的形式。

视图可在其不映射到任何基表列的选择列表中包含表达式,例如:

CREATE VIEW ExpressionView
AS
SELECT *, GETDATE() AS TodaysDate
FROM Northwind.dbo.Employees

虽然 TodaysDate 列并不映射到任何表列,但是 Microsoft® SQL Server™ 2000 必须在将其传递到在 ExpressionView 上定义的 INSTEAD OF 触发器的 inserted 表中生成 TodaysDate 列。然而 inserted.TodaysDate 列可为空,所以引用 ExpressionView 的 INSERT 不必为该列提供值。因为表达式不映射到表中的列,所以触发器会忽略 INSERT 在该列中提供的任何值。

相同的方法应该应用于简单视图表达式,这些表达式引用基表中的计算列,而基表也生成不依赖于其它列的结果,例如:

CREATE TABLE ComputedExample
   (
    PrimaryKey    int PRIMARY KEY,
    ComputedCol   AS SUSER_NAME()
   )

一些复杂表达式映射到多列:

CREATE TABLE SampleTable
     (
      PriKey    int,
      FirstName nvarchar(20),
      LastName  nvarchar(30)
     )
GO
CREATE VIEW ConcatView
AS
SELECT PriKey, FirstName + ' ' + LastName AS CombinedName
FROM SampleTable
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章