update a set a.col = b.col from ta a left join tb b on a.id = b.id出现列名 'col' 无效。
可以写成动态语句。 首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新 i=LEN(TB) @sql = '' While i>0 begin @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go' i++ end
可以写成动态语句。 首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新 i=LEN(TB) @sql = '' While i>0 begin @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go' i++ end
可以写成动态语句。 首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新 i=LEN(TB) @sql = '' While i>0 begin @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go' i++ end
列出TB表字段 select name from syscolumns where id=object_id('TB')再怎么办呢?
create table ta(id int,col1 int, col2 int) create table tb(id int,col1 int,col2 int) insert ta select 1,1,1 insert ta select 2,3,1insert tb select 1,3,3 insert tb select 2,1,5 godeclare @s varchar(8000) select @s = 'update a set ' select @s = @s + 'a.['+name+']= b.['+name+'],' from syscolumns where id = object_id('tb') and name <> 'id'select * from ta set @s = left(@s,len(@s) - 1) exec ( @s+' from ta a left join tb b on a.id = b.id') select * from ta drop table ta,tb /*id col1 col2 ----------- ----------- ----------- 1 1 1 2 3 1(所影响的行数为 2 行) (所影响的行数为 2 行)id col1 col2 ----------- ----------- ----------- 1 3 3 2 1 5(所影响的行数为 2 行)*/
INSERT INTO v_purchase/*源表*/ (receiptid,buydate,posid,payee,totalamount,totaldiscount)/*目标表字段*/ SELECT serialno,sdate,posno,cshcode,total,change/*源表字段*/ FROM total/*源表*/
set a.col = b.col
from ta a
left join tb b
on a.id = b.id出现列名 'col' 无效。
可以写成动态语句。
首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
i=LEN(TB)
@sql = ''
While i>0
begin
@sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go'
i++
end
可以写成动态语句。
首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
i=LEN(TB)
@sql = ''
While i>0
begin
@sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go'
i++
end
可以写成动态语句。
首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
i=LEN(TB)
@sql = ''
While i>0
begin
@sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作 go'
i++
end
create table tb(id int,col1 int,col2 int)
insert ta select 1,1,1
insert ta select 2,3,1insert tb select 1,3,3
insert tb select 2,1,5
godeclare @s varchar(8000)
select @s = 'update a set '
select @s = @s + 'a.['+name+']= b.['+name+'],'
from syscolumns
where id = object_id('tb') and name <> 'id'select * from ta
set @s = left(@s,len(@s) - 1)
exec ( @s+' from ta a left join tb b on a.id = b.id')
select * from ta
drop table ta,tb
/*id col1 col2
----------- ----------- -----------
1 1 1
2 3 1(所影响的行数为 2 行)
(所影响的行数为 2 行)id col1 col2
----------- ----------- -----------
1 3 3
2 1 5(所影响的行数为 2 行)*/
SELECT serialno,sdate,posno,cshcode,total,change/*源表字段*/
FROM total/*源表*/