小编tpc*_*son的帖子

无限触发循环......按设计(!).如何解决?

我知道我会因此而受到抨击,但......

我有表ProductA,ProductB和ProductC,它们具有非常相似的模式,但每个表中有2或3列.每个表都有一个插入触发器,它会将A,B或C中每个插入的重复行触发到表产品,这是所有产品的合并.此外,A,B或C上的更新触发器同样会更新表产品中的等效行,删除触发器也是如此.所有工作都完美无缺,直到.....我们更新表产品A列,表A,B和C中也存在.

我正在寻找在Table Products上开发一个触发器,它将在表A,B和C,BUT中的每一个中将A列中的更新传播到A列,而不调用表A,B和C上的更新触发器.所需的行为是更新在两个方向上工作而不会产生无限循环.(注意,表产品中只有2列需要复制到表A,B和C)

选项包括:

  1. 重新设计架构,以便这种情况不存在(不是卡片,这是一个快速的解决方案,重新设计可以由其他人完成);
  2. 当我更新表产品时手动禁用触发器(这都是在应用程序级别完成的,用户无法在更新表产品时登录SSMA并禁用触发器);
  3. 来Stack Overflow并希望有人已经遇到过这类问题!

从概念上讲,这怎么可能呢?

6/7更新:

这是表A中的触发器代码(例如):

    ALTER TRIGGER   [dbo].[GRSM_WETLANDS_Point_GIS_tbl_locations_update]
    ON  [dbo].[GRSM_WETLANDS_POINT]
    after update  
    AS   
    BEGIN   
      SET NOCOUNT ON;  

      update dbo.TBL_LOCATIONS
      set 
    X_Coord = i.X_Coord,
    Y_Coord = i.Y_Coord,
    PlaceName = i.PlaceName,
    FCSubtype = case
    when i.FCSubtype = 1 then 'Point: Too Small to Determin Boundary'
    when i.FCSubtype = 2 then 'Point: Boundary Determined by Contractor but not Surveyed' 
    when i.FCSubtype = 3 then 'Point: Wetland Reported but not yet Surveyed'
    end ,
    Landform = i.Landform …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

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

如何验证 UUID 列表并返回 UUID 版本?

我需要验证 UUID 列表并确定版本。例如,使用 h ttps://www.beautifyconverter.com/uuid-validator.php并输入 25CCCA6F-1568-473E-BFED-EC08C31532C6 我可以确定它是有效的,并且是版本 4。我从https:/ /www.snip2code.com/Snippet/12614/Validating-a-uuid4-with-Python-以及如何确定字符串是否是有效的 v4 UUID?UUID 模块可以一次验证一个,或测试特定版本,但不确定 UUID 是否会测试所有 4 个版本并返回版本。

python uuid

2
推荐指数
2
解决办法
9520
查看次数

超出触发器嵌套级别?

当此触发器触发时,包含在以下代码块中

alter TRIGGER [dbo].[locations_update_geometry_After]
ON  dbo.TBL_LOCATIONS   
for update   
AS   
  INSERT dbo.TBL_LOCATIONS(SHAPE, X_Coord, Y_Coord,objectid) 
  SELECT a.Shape, a.X_Coord, a.Y_Coord, a.objectid
  FROM  
  (  
    SELECT  
      SHAPE = CASE WHEN SHAPE IS NOT NULL   
        THEN SHAPE ELSE Geometry::STPointFromText('POINT('  
          + CAST(X_Coord AS VARCHAR(20)) + ' '   
          + CAST(Y_Coord AS VARCHAR(20)) + ')', 26917) END,  
      X_Coord = CASE WHEN SHAPE IS NULL THEN X_Coord ELSE SHAPE.STX END,  
      Y_Coord = CASE WHEN SHAPE IS NULL THEN Y_Coord ELSE SHAPE.STY END,  
      objectid  
     FROM inserted  
  ) AS a
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

无法保存编辑。底层 …

sql-server-2008

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

标签 统计

sql-server-2008 ×2

python ×1

sql ×1

sql-server ×1

uuid ×1