从两个表更新查询,但有一些例外
Posted
技术标签:
【中文标题】从两个表更新查询,但有一些例外【英文标题】:Update query from two tables, but some exceptions 【发布时间】:2015-04-01 06:07:51 【问题描述】:Picture(screen shot) http://test.englisheye.co.kr/pic44.jpg
请看上面的图片。
我需要使用 T-SQL 查询从 Table_A
更新 Table_B
。
(这里用两个表进行普通更新是行不通的。)
问题是'4,7'
或'5,3'
之类的值。
我想我需要创建一个函数,但不知道从哪里开始。
请帮帮我。
【问题讨论】:
发布您有问题的查询。图片无法访问。 我更正了图片网址。现在它应该可以访问了。请参考图片。这是一个相当特殊的情况,所以我们需要看到图像。 Table_B 中的 num 列可以容纳超过 2 个数字吗?I think I need to create a function, but don't know where to start
- 我会从一个更简单的问题开始。您的问题至少包含两个需要解决的主要问题:1)将 CSV 字符串拆分为单独的值,以及 2)将单独的值连接成 CSV 字符串。如果您以前从未创建过函数,那将是第三个函数。所以,开始独立解决这些问题。寻找现成的解决方案,尝试理解它们,然后尝试将它们应用于您的情况。当您遇到特定问题时,请随时返回此处询问。到目前为止,我将其投票为“不清楚”。
经过一些研究,我认为我可以使用“CURSOR”。谢谢你们!~无论如何我都会找到办法的。
【参考方案1】:
declare @a int, @b nvarchar (20),@c nvarchar (20),@f nvarchar (20),@d int,@e int=1,@g nvarchar(20)
set @b='' set @c='' set @d =1 set @f='';
create table #mytable (num nvarchar (20),start nvarchar (20) ,[end] nvarchar (20))
while @e<=(select count(*)from table_b) begin
set @a= (SELECT (len (num)+1)/2 FROM (select ROW_NUMBER () over(order by [start]) as id, * from table_b) a where id=@e)
while @d<=@a begin
set @b =(SELECT SUBSTRING(num,2*@d-1,1) FROM (select ROW_NUMBER () over(order by start) as id, * from table_b) a where id=@e)
set @c +=(select [end] from Table_A where num =cast (@b as int)) +', '
set @f +=(select [end] from Table_A where num =cast (@b as int)) +', '
set @d+=1
end
set @g = ( select num from (select ROW_NUMBER () over(order by [start]) as id, * from table_b) w where id=@e)
insert into #mytable
select @g, left(@c,case when len(@c)>1 then len(@c)-1 else len(@c) end ) as 'c',
left(@f,case when len(@f)>1 then len(@f)-1 else len(@f) end ) as 'f'
set @b='' set @c='' set @d =1 set @f=''
set @e+=1
end
update b
set b.start =t.start, b.[end]=t.[end]
from Table_B b
inner join #mytable t on b.num =t.num
drop table #mytable
代码有点复杂,但对我有用。
【讨论】:
以上是关于从两个表更新查询,但有一些例外的主要内容,如果未能解决你的问题,请参考以下文章