我需要用写在另一个表Y中的值更新表X中的一列。请注意,由于删除了几行/几行,Id列中存在空白。它以表X中的Id列63450开头,并且并不是真正的顺序,如下所示:
表X
Id Name Value
-------------------------------------------
63450 cmd NULL
63451 Jong NULL
63456 Xau-Min NULL
63457 bgf NULL
63458 tcr NULL
63459 cro NULL
63500 344453f NULL
63501 stackoverflow NULL
表Y(参数化)
Id Acronym Code
-------------------------------
1 cmd 545654
2 bgf 454565
3 cro 555555
4 rtg 465456
5 ert 546546
6 tcr 878787
现在更新表X之后,它应该显示如下。它将根据表Y中的匹配项更新表X中的vALUE。
更新后的表X ...
Id Name Value
-------------------------------------------
63450 cmd 545654
63451 Jong NULL
63456 Xau-Min NULL
63457 bgf 454565
63458 tcr 878787
63459 cro 555555
63500 344453f NULL
63501 stackoverflow NULL
如果我尝试
USE Database
DECLARE @counter int
SET @counter=(select count(*) from table_X)
WHILE @counter>0
BEGIN
UPDATE table_X
SET Value=(select Code
from table_Y b inner join table_X a on a.Name=b.Acronym
where a.Id= max(a.Id)-@counter+1)
SET @value=@value-1
END
由于ID不是连续的,它将无法工作...如何实现如图所示的更新表X?
2nd:最好有一个仅检测字母的功能(在表X的Name列中).. SQL中是否有?我只知道检测字符串中的数字值:isnumeric()函数。
谢谢。 :)
答案 0 :(得分:4)
我认为这就是你所追求的:
UPDATE X
SET [Value] = Y.Code
FROM TableX X
JOIN TableY Y ON X.[name] = Y.Acronym;
这里绝对不需要循环。实际上,在SQL中使用循环结构通常是性能上最糟糕的事情。
就SQL语句而言,这实际上是一个非常简单的查询,所以您了解它的作用吗?