苹果有锁版解锁:~求救~请SQL高手帮我写个SQL语句!!急!!!

来源:百度文库 编辑:高校问答 时间:2024/05/08 05:49:50
是这样的

需要同时更新 ptype 和 IniGoodsStocks 这2个表中的的2个字段。ptype.typeID 和

IniGoodsStocks.PtypeID 是一致的,而且IniGoodsStocks表只有PtypeID这一个字段与ptype表相关,所

有必须同时更新!

取 ptype 表中的 ParID 字段(数字 5位 或10位),同时更新 ptype 表中 typeID 字段中编码的前5位

或10位,以及 IniGoodsStocks 表中 PtypeID 字段中编码的前5位 或10位。保持 type.typeID 和

IniGoodsStocks.PtypeID 的一致。

!--重要--!

!当ptype.typeID 只有5位的不进行更新。

!因为 ptype.typeID 是ptype表中的关键字段,更新后编码是不允许重复的。否则将导致以上语句执行失败。但是这个数据库中确实有可能发生重复的现象!!!所以还得先做个验证语句!或者更新时能自动进行纠正。

我的SQL知识无法写这么复杂的语句~有哪位高手谁能帮忙写个啊!!感激不尽啊!!!!!
可能我没说清楚啊~是取一个表中的一个字段去同时更新2个表....
SQL语句要取 ptype 表中的 ParID 字段(数字 5位 或10位),用这个字段去 更新 ptype.typeID 以及 IniGoodsStocks.PtypeID 字段中编码的前5位 或10位(都是数字)。要同时更新2个表,保证 ptype.typeID 和 IniGoodsStocks.PtypeID 更新后仍然保持原有正确的对应。要同时更新2个表,保证 ptype.typeID 和 IniGoodsStocks.PtypeID 更新后仍然保持原有正确的对应。

还得麻烦您,执行的时候提示‘不能在具有唯一索引 'PType_Index' 的对象 'dbo.ptype' 中插入重复键的行。语句已终止。’麻烦您帮我写个检查哪些行在更新后编码重复的语句!我手工改改编码~谢谢~~再给分啊

update IniGoodsStocks
set
PtypeID =stuff(cast(PtypeID as varchar),1,len(cast(ptype.ParID as varchar)),cast(ptype.ParID as varchar))
from IniGoodsStocks join ptype
on
IniGoodsStocks.PtypeID=ptype.typeID
and len(cast(PtypeID as varchar))>5
and stuff(cast(PtypeID as varchar),1,len(cast(ptype.ParID as varchar)),cast(ptype.ParID as varchar)) not in (select cast(PtypeID as varchar) from IniGoodsStocks )

update ptype
set
typeID =stuff(cast(typeID as varchar) ,1,len(cast ParID as varchar)),cast(ParID as varchar)
where len(cast(typeID as varchar))>5
and stuff(cast(typeID as varhcar),1,len(cast(ParID as varchar)),cast(ParID as varchar) ) not in (select cast(typeID as varchar) from ptype)
这是批量更新的 要是想更新某一条,就加ParID ='?'条件吧
这是经过过滤掉重复的,刚才把几个字段都当字符串处理了,现在改好了
因重复没有被修改的记录:
select * from IniGoodsStocks where stuff(cast(PtypeID as varchar),1,len(cast(ptype.ParID as varchar)),cast(ptype.ParID as varchar)) in (select cast(PtypeID as varchar) from IniGoodsStocks )

select * from ptype where stuff(cast(typeID as varchar) ,1,len(cast ParID as varchar)),cast(ParID as varchar) in (select cast(typeID as varchar) from ptype)

1: type.typeID = 123456
当修改type.typeID 为 12345678 时
select IniGoodsStocks.typeid
from IniGoodsStocks where typeid = 123456
然后修改更新,

2: type.typeID = 12345
当修改type.typeID 为 12345678 时
首先转换type.typeID的字符值,设Str1 为字符串型
str1 = inttostr(12345)
然后取长度 i =length(str1)
如果大于5,执行第1种情况

这个问题其实很简单!但是我不知道!谢谢!