小编Rah*_*dam的帖子

同一表上的更新前后触发器

我有一个有 4 列的表qtyqtydiffpricevalue

我想要after update trigger在 qty 行值更改(多于一行)时触发。

Before trigger应阅读,并从数量存储旧值和触发后应从新的价值上减去旧值qty列,在得到差值qtydiff繁衍与price列和更新的结果在value列。

下面的代码只是我还没有测试过的概念代码,我不确定它是否有效,但是有没有办法让更新前后在同一个触发器中工作?

 CREATE TRIGGER [dbo].[Price_Modified]
       ON [dbo].[STOCK]
       BEFORE UPDATE ON STOCK
    AS BEGIN
        SET NOCOUNT ON;
        IF UPDATE (Qty) 
        BEGIN
            SELECT qty
            FROM STOCK
        END 
AFTER UPDATE
    AS BEGIN
        SET NOCOUNT ON;
        IF UPDATE (Qty) 
        BEGIN
            UPDATE Stock
            SET value = price * qtydiff
            FROM STOCK
            WHERE qtydiff = oldvalue - …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server c#

3
推荐指数
1
解决办法
3万
查看次数

根据SQL C#中的条件增加每一行

我有一个 textBox 的值为 100,我想在 stock_out 列中增加该值,但只有直到 stock_out 列等于 stock_in 列,如果第一行值是 40 比第一行 stock_out 应该从 100 增加 10 比100(90) 的剩余值应在其下方的行中递增,然后在其下方的行中递增,直到需要为止(直到 100 为 0)。项目按 Item_Name 和 Bill No asc 排序。

Bill No   Item_Name   Stock_in  Stock_out  stock_in_hand
1          chicken       50        40           10
2          chicken       40         0           40
5          chicken       60        10           50
6          chicken       100       20           80
3          fish          100       30           70
4          fish          20        20            0
Run Code Online (Sandbox Code Playgroud)

要得到的结果。

Bill No   Item_Name   Stock_in  Stock_out  stock_in_hand
1          chicken       50        50           0
2          chicken       40        40 …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2014

1
推荐指数
1
解决办法
1714
查看次数

JOIN 的替代方案

第一次触发

ALTER TRIGGER [dbo].[Price_Modified]
    ON [dbo].[stock_recieve]
    AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Stock_out) 
BEGIN
    UPDATE s
    SET value = new.Item_Price * new.Stock_out
    FROM stock_recieve AS s
    JOIN inserted AS new ON new.[Bill No] = s.[Bill No]
    JOIN deleted AS old ON old.[Bill No] = s.[Bill No]
END;
Run Code Online (Sandbox Code Playgroud)

第二个触发器。

 ALTER TRIGGER [dbo].[newval] 
      ON [dbo].[stock_recieve]
        AFTER UPDATE
    AS
    SET NOCOUNT ON;
    IF UPDATE (Stock_out) 
    BEGIN
        UPDATE s
        SET Uservalue = new.Item_Price * new.Stock_out
        FROM stock_recieve AS s
        JOIN inserted AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

1
推荐指数
1
解决办法
981
查看次数

标签 统计

sql-server ×3

sql-server-2014 ×2

c# ×1

t-sql ×1

trigger ×1