尽管SBO强烈要求我们不要通过Sql语句在数据库维护界面上修改SBO业务信息,事实上,任何一个ERP等管理软件的厂商也都是这样要求的。不过有些时候,我们只有--真的只有这一条路了。
不过,要修改SBO的某个主数据的主键信息,还是应该慎重,至少您需要有能力一次性将数据库中的对应的所有数据全部修改过来才行。这里介绍两种通过动态Sql的方式来达到上述的目标。
 
实例一,清除SBO中没有被引用的主物料信息。
所谓没有被引用,原则上应该是:1、没有发生业务;2、没有被包含在BOM中。考虑到SBO的所有业务单据发生后都被记录在日志表OINM中,而BOM表对应着OITT和ITT1,那么,对应的修改程序应该为:
create procedure fsup_ClearNoRefenceItem
as
begin
 _declare@strTable nvarchar(50), @strSql nvarchar(4000)
_declaremycursor cursor for
  _selectdistinct a.name from sysobjects a inner join syscolumns b on a.id=b.id and lower(b.name)='itemcode' and  OBJECTPROPERTY(a.id, N'IsUserTable') = 1
open mycursor
 fetch next from mycursor into @strTable
 while @@fetch_status=0
 begin
  print_char(13)+'正在删除 ' + @strTable
_select@strSql = '_deletefrom ' + @strTable + ' WHERE ItemCode not in (_selectdistinct ItemCode OINM union all _selectcode from OITT union all _selectdistinct code from ITT1)'
__exec(@strSql)
print '已经删除 ' + @strTable
fetch next from mycursor into @strTable
 end
close mycursor
 deallocate mycursor
end
go
这是一个存储过程,建立在您的SBO数据库中后,通过以下语句来执行删除:__exec fsup_ClearNoRefenceItem
当然,为了更好的扩展性,这个存储过程是可以带上参数的,比如带着参数将您不愿意删除的那么信息保留下来。这个功能扩展很容易,在此就不写出实际代码了。
 
实例二,修改SBO中某个主数据的主键信息为另一值。
SBO主数据是指非单据信息,比如物料、员工、仓库、财务科目等。在此列举的是仓库主数据的一次性修改。
create procedure fsup_ModifyAllWhsCode
 @OldWhs  nvarchar(100),
 @NewWhs  nvarchar(100)
as
begin
 _declare@strTable nvarchar(50), @strSql nvarchar(4000)
_declaremycursor cursor for
  _selectdistinct a.name from sysobjects a inner join syscolumns b on a.id=b.id and lower(b.name)='WhsCode' and  OBJECTPROPERTY(a.id, N'IsUserTable') = 1
open mycursor
 fetch next from mycursor into @strTable
 while @@fetch_status=0
 begin
  print_char(13)+'正在修改 ' + @strTable
_select@strSql = '_update' + @strTable + ' SET WhsCode=N''' + @NewWhs + ''' WHERE WhsCode=N'''+@OldWhs+ ''''
print @strSql
  __exec(@strSql)
print '已经修改 ' + @strTable
fetch next from mycursor into @strTable
 end
close mycursor
 deallocate mycursor
end
go
这个过程传过来两个参数,一个是原来的值,一个是新值。通过这个过程可以完成将多数的业务信息中仓库的原值修改为新值,不过,也有例外,比如仓库转储的时候,其的字段不叫WhsCode,比如ItemCode,在OITT和ITT1中成为Code,就无法完成了,这是需要你自己做些善后工作。当然可,如果您要修改SqlCode之类的,就完全没有任何后虞之忧了。
 
改进实例二,成为通用的主数据修改程序。
这个存储过程可以扩展得更为强大,比如传过来三个参数,其中一次参数为主键的列名,不妨称之为@keyColumn,另外两个仍然是原值和新值。这个时候过程中唯一要修改的就是将上述的 'WhsCode' 改为 @KeyColumn,就可以了。如下:
create procedure fsup_ModifyAllMasterCode
 @KeyColumn  nvarchar(30),
 @OldKey  nvarchar(100),
 @NewKey  nvarchar(100)
as
begin
 _declare@strTable nvarchar(50), @strSql nvarchar(4000)
_declaremycursor cursor for
  _selectdistinct a.name from sysobjects a inner join syscolumns b on a.id=b.id and lower(b.name)=@KeyColumn and  OBJECTPROPERTY(a.id, N'IsUserTable') = 1
open mycursor
 fetch next from mycursor into @strTable
 while @@fetch_status=0
 begin
  print_char(13)+'正在修改 ' + @strTable
_select@strSql = '_update' + @strTable + ' SET ' + @KeyColumn + ' =N''' + @NewKey + ''' WHERE ' + @KeyColumn + ' = N'''+@OldKey + ''''
print @strSql
  __exec(@strSql)
print '已经修改 ' + @strTable
fetch next from mycursor into @strTable
 end
close mycursor
 deallocate mycursor
end
go
以上代码仅针对基于Sql Server数据库的SBO系统,并在对应环境下测试通过。
本文转自foresun  51CTO博客,原文链接:http://blog.51cto.com/foresun/202709,如需转载请自行联系原作者

[原创]通过动态Sql语句,一次性彻底删除或者修改SBO的某个字段对应内容的信息...相关推荐

  1. 利用SQL语句创建、删除、修改和查看数据表

    [技术导图] 1.连接Mysql服务:mysql -u root -p; 2.使用数据库:use teacherdb; 3.创建student表(无约束条件):create table student ...

  2. xml模糊查询语句_2Mybatis学习笔记07:动态SQL语句(原创,转载请注明来源)

    开发环境: 硬件环境:Windows10+JDK 1.8: 软件环境:Java+Eclipse+Mybatis+maven3.6+tomcat8.0+Postgresql 10.6: 用到的jar包: ...

  3. Oracle 动态游标 PL/SQL 动态SQL语句 open for [using] 语句

    PL/SQL:open for [using] 语句 2017年07月19日 09:52:55 学孩儿无牙哭做粥 阅读数:681 标签: oracleSQLPLSQL 更多 个人分类: ORACLES ...

  4. 学习SQL应知道的动态SQL语句基本语法

    学习SQL应知道的动态SQL语句基本语法 1 .普通SQL语句可以用Exec执行 9Kp=A   ' CdaFr1   eg: Select * from tableName Wsc+A:<&q ...

  5. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  6. 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...

  7. 浅析PowerBuilder下动态SQL语句

    作者:张继荣 王举国 谭琦 谢元呈 PowerBuilder是目前最流行的数据库开发工具之一.PowerBuilder提供了在程序代码中加入嵌入式SQL语句的功能来支持对数据库的访问.但这种嵌入式SQ ...

  8. PB中执行动态SQL语句(温故知新)

    转自:http://blog.sina.com.cn/s/blog_538f907c0100fak4.html PowerBuilder的嵌入式SQL语句只能支持一些固定的标准的SQL语句,即在进行程 ...

  9. Mybatis—动态SQL语句与逆向工程

    Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...

  10. oracle表名使用变量名,oracle 中动态sql语句,表名为变量,怎么解?

    如果你用的是 Oracle 8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句,但这个动态语句中带参数,或 ...

最新文章

  1. 古典人像秒变3D,视角还能随意切,华为上交联手出品
  2. ubuntu服务器在虚拟机中的配置
  3. Android获取手机及外设存储空间
  4. 安装了但是报错找不到_安装MySQL时由于找不到vcruntime140_1.dll,无法继续安装
  5. 使用Java API的5个技巧
  6. BugkuCTF-Crypto题杰斐逊
  7. inventor2019有无CAE_Inventor2019最新下载_Inventor2019正式版 - 软件帝
  8. 蓝桥杯——说好的进阶之入学考试
  9. [Threejs]环境光与HDR贴图
  10. 【梦幻西游】12门派版一键端
  11. 苹果笔记本没有计算机管理员,Mac管理员账户丢失怎么办
  12. 动手学深度学习(二十七)——微调(fine turning)
  13. uniCloud学习笔记---uniId
  14. 简化3D渲染和动画制作丨上海道宁为您带来强大的3D渲染软件——KeyShot
  15. 慧极必伤,情深不寿,强极则辱;谦谦君子,温润如玉
  16. 基于OpenCV的人脸识别考勤系统
  17. super_status_bar与status_bar的关系
  18. java 给定价格和付款金额计算找零金额-挖财笔试编程题
  19. java随堂练习07,练习数组
  20. 企鲸客SCRM免费赠送企业微信考勤机

热门文章

  1. 特斯拉开火,状告5名前员工、小鹏汽车、Zoox身陷漩涡...
  2. 2022-2028年中国冷冻草莓加工行业市场竞争态势及发展趋向分析报告
  3. 南华大学计算机科学学院,南华大学计算机科学与技术学院介绍
  4. 华人工程师在美国-从微软高管离职说起
  5. 数据中台-背景与概念
  6. android 连 wpa3路由器,WPA3 和 Wi-Fi Enhanced Open
  7. word中的方括号怎么删_Word如何批量删除习题括号内答案
  8. html5 手机uc浏览器 复制链接,清除UC手机浏览器强制在页面中加入的关键词链接...
  9. C语言编译器之一,GCC编译器
  10. Linux修改网卡地址(临时/永久)