SQL - disparadores en sql

 
Vista:
sin imagen de perfil

disparadores en sql

Publicado por BathanF (8 intervenciones) el 14/03/2023 16:15:34
En SQL Server, estoy usando un disparador que funciona como se esperaba cuando ejecuto una consulta en la ventana de consulta de SQL Server Management Studio. El objetivo del activador es tomar el valor más reciente de una tabla (donde una identificación coincide con la identificación insertada) y agregarlo a la fila insertada.

Aquí hay algunos fragmentos de mi código C# y el disparador.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
CREATE TRIGGER getLatestCap
ON  TestIDTable
AFTER insert
AS
BEGIN
    SET NOCOUNT ON;
 
    DECLARE @BID INT;
    DECLARE @Date Date;
 
    SET @BID = (SELECT BattID FROM inserted);
    SET @Date = (SELECT Test_Date FROM inserted);
 
    SELECT M_Cap, Cap_Date
    INTO #tempTable
    FROM CapDataTable
    WHERE BattID = @BID;
 
    -- Set the Test_Cap entry in TestIDTable to that capacity.
    UPDATE TestIDTable
    SET Test_Cap = (SELECT M_Cap
                    FROM #tempTable
                    WHERE Cap_Date = (SELECT max(Cap_Date)
                                      FROM #tempTable))
    WHERE BattID = @BID AND Test_Date = @Date;
END
GO
 
private void Setup()
{
        try
        {
            string BattSelect = "SELECT * FROM " + tbl;
            dt = new DataTable();
            Adpt = new SqlDataAdapter(BattSelect, ConnectionStr);
            builder = new SqlCommandBuilder(Adpt);
            Adpt.Fill(dt);
        }
        catch (Exception e)
        {
            MessageBox.Show("While Connecting to "+tbl+": " + e.ToString());
        }
    }
 
    private void UpdateDB()
    {
        try
        {
            Adpt.InsertCommand = builder.GetInsertCommand();
            Adpt.UpdateCommand = builder.GetUpdateCommand();
            Adpt.Update(dt);
        }
        catch (Exception e)
        {
            MessageBox.Show("While Updating " + tbl + ": " + e.ToString());
        }
    }

También estoy interactuando con la misma base de datos que tiene el disparador usando un DataAdapter en C#. El disparador no se ejecuta cuando uso MyAdapter.update(MyDataTable) para poner nuevos valores en la tabla a la que está asociado el disparador en esta página scaler.

Investigué mucho, pero nadie más parece tener este problema, así que supongo que me estoy perdiendo algo esencial. También soy nuevo en la interacción con la base de datos .Net. Excepto por no disparar el gatillo, el adaptador de datos funciona normalmente (es decir, se inserta y actualiza según sea necesario).

Resumen de la pregunta: el activador funciona en SQL Server pero no se dispara (ni se queja) cuando se usa un adaptador de datos.

¡Gracias por su tiempo y ayuda!

Marvin
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

disparadores en sql

Publicado por Isaias (1921 intervenciones) el 14/03/2023 16:37:08
Los disparadores fueron creados para hacer cumplir el DRI no para codificar la logica del negocio, le sugiero que busque otra alternativa para realizar lo que pretende
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar