[重发 再加50分 共150 ]---异表批量更新字段值-----难题
看来朋友们没看懂问的,我重发一下,这回给数据
===============================
建了一个tablea表,
字段名 类型
----------------
aid nchar(10)
-----------------
aname nchar(50)
------------------
自动生成数据
-------------
DECLARE @I INT
DECLARE @ENDID INT
SELECT @I = 0
SELECT @ENDID = 200 --在此处更改要插入的数据,重新插入之前要删掉所有数据
WHILE @I <= @ENDID
BEGIN
INSERT INTO tablea
SELECT 'AB'+CAST(@I AS VARCHAR(10))+'EF','B-'+CAST(@I AS VARCHAR(10))
SELECT @I = @I + 1
END
=================
建了一个tableb表,
字段名 类型
----------------
bid nchar(10)
-----------------
bname nchar(10)
------------------
bcontext nchar(80)
-------------------
填加数据
DECLARE @I INT
DECLARE @ENDID INT
SELECT @I = 300
SELECT @ENDID = 600 --加300条哦
WHILE @I <= @ENDID
BEGIN
INSERT INTO tableb
SELECT 'AB'+CAST(@I AS VARCHAR(10))+'EF','B-'+CAST(@I AS VARCHAR(10)),'iuuiok'
SELECT @I = @I + 1
END
------------------
好了,现在tablea中有了200条数据,tableb中有300数据,并且它们字段数不同(一个有2,一个有3个)
我想实现用tableb中的第50-250条数据的bid 值 来 更新 tablea中的200条数据aid值
我自己试着写的 update tablea set aid = bid from tableb where bid in (select top 200 bid from tableb)
结果:所有的tablea中的aid字段的值是 'AB300EF'{这是tableb中bid字段中的第一个记录的值},我错哪了呢?为什么不是一对一的呢?
这次应该我是说明白我的问题了,希望高手给解决一下。
这贴是50+100{100分在下贴中,是一个问题}
http://topic.csdn.net/u/20090408/23/882b15fd-23ec-467a-9259-9ec7fb471663.html?seed=452852627
[解决办法]
;WITH Liang AS( SELECT *,rnk=ROW_NUMBER() OVER(ORDER BY GETDATE()) FROM tablea)UPDATE Liang SET aid=b.bidFROM ( SELECT *,rnk=ROW_NUMBER() OVER(ORDER BY GETDATE()) FROM tableB) AS BWHERE B.rnk BETWEEN 50 AND 250 AND Liang.rnk=B.rnk