使用触发器修改视图时更新表

时间:2016-05-10 16:36:17

标签: asp.net sql-server triggers code-first

我在服务器中有一个数据库作为[test]。这个[test]数据库有大约50个表,我通过使用最基本的表列在该[test]数据库中创建了一个视图。然后又在[list]的同一服务器中有另一个数据库,我通过参考[test]数据库视图在[list]数据库中创建了一个视图。然后我将[list]数据库视图中的数据插入到同一[list]数据库中的表中。更新[test]数据库后,我需要在[list]数据库中更新我的视图和表。

为了做到这一点,我先写了一个触发器来更新[list]数据库中的视图并且它有效。这是触发器。

Sub copyData()
    Dim invNo As String
    Dim lastRow As Integer
    Dim sourceSht As Worksheet
    Dim targSht As Worksheet

    Set sourceSht = Worksheets("Sheet3")

    'evaluates every data item from row 2 to last populated row
    For Row = 2 To sourceSht.Cells(sourceSht.Rows.Count, 1).End(xlUp).Row

        invNo = sourceSht.Range("F" & Row).Value

        'if invNo blank, skip
        If invNo <> "" Then
            'try to find the sheet, make if does not exist
            invNo = invNo & "_INV"
            On Error Resume Next
            Set targSht = Worksheets(invNo)
            If targSht Is Nothing Then
                Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = invNo
                Set targSht = Worksheets(invNo)
                'SetHeader
            End If

            'find first empty row in targSht
            lastRow = targSht.Cells(targSht.Rows.Count, 1).End(xlUp).Row + 1

            'copy row of data
            sourceSht.Range("A" & Row & ":L" & Row).Copy
            targSht.Range("A" & lastRow & ":L" & lastRow).Select
            targSht.Paste

            'must do to make more sheets
            Set targSht = Nothing
        End If
    Next
End Sub

现在我需要在listView更新后更新我的[list]数据库表。为此,我写了以下触发器。当我执行触发器时,我得到了成功完成命令的结果,但没有更新我的表。

Use database list
Create trigger UpdateView on listView Instead of Update
AS
Begin
Update [test].[dbo].[testView]
set testPersonId = testPersonId + 1
From testView
End
Go

我只需要知道这个触发器的错误以及如何使它工作。

以下是我的testView中的对象。

Use database list
Create trigger UpdateTable on listTable Instead of Update
AS
Begin
Update [list].[dbo].[listView]
set listPersonId = listPersonId + 1
From listView
End
Go

以下是listView中的对象。

> testPersonId int
> testPersonName nvarchar
> testDepId int
> testDepName nvarchar
> testLogRecordNowId int
> testLogRecordNowTime datetime
> testNowLogEvent smallint
> testLastLogRecordTime datetime
> testLastLogEvent smallint
> testInTimeHour nvarchar
> testInTimeMinute nvarchar

然后我的[list]数据库中的表已经通过codefirst方式创建。这是代码。

> listPersonId int
> listPersonName nvarchar
> listDepId int
> listDepName nvarchar
> listLogRecordNowId int
> listLogRecordNowTime datetime
> listNowLogEvent smallint
> listLastLogRecordTime datetime
> listLastLogEvent smallint
> listInTimeHour nvarchar
> listInTimeMinute nvarchar

我能够将listView数据插入此表(listTable)。现在我只需要在listView更新后更新此表。是否可以使用触发器执行此操作?如果不是,是否有其他方法可以不使用触发器?

0 个答案:

没有答案