找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 13942|回复: 31

U872触发器价格数据库自动取用存货编码

[复制链接]
发表于 2012-4-25 13:10:37 | 显示全部楼层 |阅读模式
悬赏100金币未解决
--U872取存货编码触发器,有价格数据库表:fin_invprice,存货档案表:Inventory--当存货档案满足条件 存货大类编码cInvCCode开头时12, 采购方式cInvCCode是外协,且价格数据库中没有编码时
--现在存货档案保存时提示有另个用户在操作
--请高手指点


USE [UFDATA_012_2012]
GO
/****** Object:  Trigger [dbo].[trig_Inventory]    Script Date: 04/24/2012 20:47:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create TRIGGER [dbo].[trig_fin-invprice ] ON [dbo].[Inventory]
FOR INSERT,UPDATE
AS
BEGIN
    UPDATE a
    SET    a.cInvCode = b.cInvCode
    FROM fin_invprice a
      right JOIN Inventory b
        on a.cinvcode=b.cinvcode
        and b.cInvCCode like '12%'
        and b.cInvDefine6 = '外协'
        and a.cinvcode not in (b.cinvcode)
END

  • 打卡等级:偶尔看看
  • 打卡总天数:40
  • 打卡月天数:4
  • 打卡总奖励:106
  • 最近打卡:2024-12-04 07:57:47
发表于 2012-4-25 16:59:55 | 显示全部楼层
描述不完整,不知道到底做什么

点评

有价格数据库表:fin_invprice存货档案表:Inventory 存货档案Inventory中更新或者增加存货编码保存时,判断有价格数据库表:fin_invprice有无存货编码,没有的话更新到嫁个数据库表  详情 回复 发表于 2012-4-26 11:51
回复

使用道具 举报

发表于 2012-4-25 21:52:18 | 显示全部楼层
估计楼主的意思是“将价格表中自动添加新加或更新的存货”,但是价格表的价格是否同时允许为空呢?

点评

价格可以为空,新的编码价格需要计算后再用调价程序更新  详情 回复 发表于 2012-4-26 11:52
回复

使用道具 举报

 楼主| 发表于 2012-4-26 11:51:11 | 显示全部楼层

有价格数据库表:fin_invprice存货档案表:Inventory



存货档案Inventory中更新或者增加存货编码保存时,判断有价格数据库表:fin_invprice有无存货编码,没有的话更新到嫁个数据库表




回复

使用道具 举报

 楼主| 发表于 2012-4-26 11:52:04 | 显示全部楼层
风帆刘工 发表于 2012-4-25 21:52
估计楼主的意思是“将价格表中自动添加新加或更新的存货”,但是价格表的价格是否同时允许为空呢?

价格可以为空,新的编码价格需要计算后再用调价程序更新
回复

使用道具 举报

发表于 2012-4-26 14:26:26 | 显示全部楼层
create TRIGGER [dbo].[trig_fin-invprice ] ON [dbo].[inventory]
FOR INSERT,UPDATE
AS
BEGIN
    declare @tempinvcode varchar(200)
    select @tempinvcode=inserted.cinvcode
    if inserted.cInvCCode like '12%'  and inserted.cInvDefine6 = '外协' and @tempinvcode not in fin-invprice then
    insert into fin-invprice  values (@tempinvcode,null)
END

--也是测试,一同探讨
回复

使用道具 举报

发表于 2012-4-26 14:33:34 | 显示全部楼层
--试一下这一个,你那触发器写的不对
CREATE TRIGGER [dbo].[trig_fin-invprice ]
ON [dbo].[inventory]
FOR INSERT,UPDATE
AS
  BEGIN
    DECLARE  @cInvCode VARCHAR(20),@cInvCCode VARCHAR(12),@cInvDefine6 VARCHAR(60)
    SELECT @cinvcode = cinvcode
    FROM   inserted
    SELECT @cInvCCode = cinvccode,@cInvDefine6 = cinvdefine6
    FROM   inventory
    WHERE  cinvcode = @cinvcode
    IF LEFT(@cInvCCode,2) = '12'
       AND @cInvDefine6 = '外协'
      BEGIN
        IF NOT EXISTS (SELECT 1
                       FROM   fin_invprice
                       WHERE  cinvcode = @cinvcode)
          BEGIN
            INSERT INTO fin_invprice(cinvcode)
            VALUES     (@cinvcode)
          END
      END
  END

点评

数据库可能已存在相同的编码 新建、编辑保存时都是这样提示  详情 回复 发表于 2012-4-27 09:22
回复

使用道具 举报

发表于 2012-4-26 15:57:36 | 显示全部楼层
学习一下楼上的,忽略了一些细节
回复

使用道具 举报

 楼主| 发表于 2012-4-27 09:22:24 | 显示全部楼层
deerjam 发表于 2012-4-26 14:33
--试一下这一个,你那触发器写的不对
CREATE TRIGGER [dbo].[trig_fin-invprice ]
ON [dbo].

数据库可能已存在相同的编码

新建、编辑保存时都是这样提示

点评

没有道理啊,我做了判断的。 IF NOT EXISTS (SELECT 1 FROM fin_invprice WHERE cinvcode = @cinvcode) 如果这个表里面不存在新增或修改的编码,就往里面插  详情 回复 发表于 2012-4-27 09:41
回复

使用道具 举报

发表于 2012-4-27 09:41:21 | 显示全部楼层
jiebozhang 发表于 2012-4-27 09:22
数据库可能已存在相同的编码

新建、编辑保存时都是这样提示

没有道理啊,我做了判断的。

IF NOT EXISTS (SELECT 1
                       FROM   fin_invprice
                       WHERE  cinvcode = @cinvcode)
如果这个表里面不存在新增或修改的编码,就往里面插入此存货编码,你可以逐句试一下。

是不是你的inventory表里面还存在其他的触发器?

点评

是的,这个是从供需政策LP/PE取数,更新到存货自定义项1 USE GO /****** Object: Trigger [dbo].[trig_Inventory] Script Date: 04/27/2012 09:59:09 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIF  详情 回复 发表于 2012-4-27 10:01
回复

使用道具 举报

 楼主| 发表于 2012-4-27 10:01:35 | 显示全部楼层
deerjam 发表于 2012-4-27 09:41
没有道理啊,我做了判断的。

IF NOT EXISTS (SELECT 1

是的,这个是从供需政策LP/PE取数,更新到存货自定义项1

USE [UFDATA_012_2012]
GO
/****** Object:  Trigger [dbo].[trig_Inventory]    Script Date: 04/27/2012 09:59:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trig_Inventory] ON [dbo].[Inventory]
FOR INSERT,UPDATE
AS
BEGIN
    UPDATE Inventory
    SET    cInvDefine1 = a.cSRPolicy
    FROM Inventory
      INNER JOIN inserted a
        on inventory.cinvcode = a.cinvcode
END


点评

看这情况应该没什么冲突,说不好。不过可以建议你将这两个触发器合到一起  详情 回复 发表于 2012-5-3 15:37
回复

使用道具 举报

  • 打卡等级:偶尔看看
  • 打卡总天数:40
  • 打卡月天数:4
  • 打卡总奖励:106
  • 最近打卡:2024-12-04 07:57:47
发表于 2012-4-27 10:35:14 | 显示全部楼层
本帖最后由 37724861 于 2012-4-27 10:53 编辑

你只是写入存货编码列,存货档案保存后,存货编码是不允许修改的,所以触发器中只保留Insert就行,不用Update
代码如下:

  1. Create TRIGGER [dbo].[TR_fin_invprice ] ON [dbo].[inventory]
  2. FOR INSERT
  3. AS
  4. Declare @Invcode varchar(20),
  5.         @invCCode varchar(12),
  6.         @invDef6  varchar(60)
  7. select @Invcode=cInvCode,@invCCode=cInvCCode,@invDef6=cInvDefine6 from inserted
  8. if not exists(select cInvCode From fin_invprice where cInvCode=@Invcode)
  9.    and left(@invCCode,2)='12'
  10.    and @invDef6='外协'
  11. insert into fin_invprice values(@Invcode)
复制代码
附送一个演示视频: DemoVideo.zip (618.08 KB, 下载次数: 15) 充值金币->

点评

添加、更新存货编码,触发器均不执行  详情 回复 发表于 2012-4-27 10:55
回复

使用道具 举报

 楼主| 发表于 2012-4-27 10:55:31 | 显示全部楼层
37724861 发表于 2012-4-27 10:35
你只是写入存货编码列,存货档案保存后,存货编码是不允许修改的,所以触发器中只保留Insert就行,不用Upda ...

添加、更新存货编码,触发器均不执行

点评

1、存货档案数据表还有一个触发器; 2、insert into fin_invprice values(@Invcode) 语法错误 应该是insert into fin_invprice(cInvCode) values(@Invcode) 吧 3、怎么让两个触发器不冲突呢 从供需政策  详情 回复 发表于 2012-4-27 11:02
回复

使用道具 举报

 楼主| 发表于 2012-4-27 11:02:10 | 显示全部楼层
jiebozhang 发表于 2012-4-27 10:55
添加、更新存货编码,触发器均不执行

1、存货档案数据表还有一个触发器;
2、insert into fin_invprice values(@Invcode)  语法错误
应该是insert into fin_invprice(cInvCode) values(@Invcode)  吧
3、怎么让两个触发器不冲突呢




从供需政策LP/PE取数,更新到存货自定义项1

USE [UFDATA_012_2012]
GO
/****** Object:  Trigger [dbo].[trig_Inventory]    Script Date: 04/27/2012 09:59:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trig_Inventory] ON [dbo].[Inventory]
FOR INSERT,UPDATE
AS
BEGIN
    UPDATE Inventory
    SET    cInvDefine1 = a.cSRPolicy
    FROM Inventory
      INNER JOIN inserted a
        on inventory.cinvcode = a.cinvcode
END

回复

使用道具 举报

  • 打卡等级:偶尔看看
  • 打卡总天数:40
  • 打卡月天数:4
  • 打卡总奖励:106
  • 最近打卡:2024-12-04 07:57:47
发表于 2012-4-27 11:06:38 | 显示全部楼层
1、你根本不说 fin_invprice表有哪些列,我创建这个表 只有一列 所以无需指定列名
2、你这个悬赏只是问这个问题,木有提到有其他触发器,请另开贴。

点评

不好意思,令开贴没有100积分悬赏了 不过修正后的还是不执行呢,我的是U872  详情 回复 发表于 2012-4-27 11:08
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-12-4 16:07 , Processed in 0.059485 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表