就象你上面这样写,写 b+c 这样的就行了。运行时就要用动态SQL执行了。
declare @sql varchar(8000)
select @sql=''
selelct @sql='update mytable set a='+d+' where d='''+d+'''
from mytableexec (@sql)
declare @sql varchar(8000)
select @sql=''
selelct @sql='update mytable set a='+d+' where d='''+d+'''
from mytableexec (@sql)
selelct @sql=@sql+' update mytable set a='+d+' where d='''+d+''''
from mytable
selelct @sql=@sql+' update mytable set a='+d+' where d='''+d+''''
from (select distinct d from mytable) t0
师兄,好象不行啊。你那句from (select distinct d from mytable) t0 不在@sql里面吗? 麻烦能解释一下' where d='''+d+''''的意思吗?请赐教谢谢。
(我没测试)
还是用函数.在函数内调用openrowset或openquery
create function comput(@b float,@c float,@d varchar(100))
returns float
as
begin
declare @sql nvarchar(500),@result float
set @sql='select '+@d+' from (select '+cast(@a as varchar(10))+'as b,'+cast(@b as varchar(10))+' as c) a'
set @result=OPENROWSET(‘provider_name’,’datasource’; ‘user_id’;’password’, @sql)
return @result
end语句:
update table set a=dbo.comput(b,c,d)
select @aa = d from aa where ???
exec ("update aa set a = "+@aa)
我用distinct 取出所有的公式,结果集一般情况下不会很多。如果有很多 ,可以一步步执行,不必一次全部执行完。newyu1127(825新生) :
以b+c为例,生成的SQL语句应该是:
update mytable set a=b+c where d='b+c'一定要加where ,因为d字段可能还有不是'b+c'的。
如果表里面d字段的值有 b+c b*c 两种(记录可能不止两条),用我的方法会生成两个update 语句:
update mytable set a=b+c where d='b+c'
update mytable set a=b*c where d='b*c'
这就是为什么要用distinct 的原因。
openquery和openrowset 好象不接受变量参数。
只有按钮的可以。
declare @sql varchar(8000)
select @sql=''
select @sql='update aaa set a='+d+' where d='''+d+'''' from
(select distinct d from aaa) t0
exec (@sql)为什么只会更新一条记录。而另外的记录不会变呢(目前记录只有三条)?按你的意思应该是这样的:
update aaa set a=b+c where d='b+c' from (select distinct d from aaa) t0为什么update后再加一个from呢?还有一个t0是什么意思??
我说过了我的语句会是这样的:
update mytable set a=b+c where d='b+c'
update mytable set a=b*c where d='b*c'你用:
declare @sql varchar(8000)
select @sql=''
select @sql='update aaa set a='+d+' where d='''+d+'''' from
(select distinct d from aaa) t0
print @sql --加上这一句看生成的SQL语句
exec (@sql)你看看结果就知道我生成的语句不是你写出来的那样的,上面的select @sql=....这句你再仔细看看。绝对不会成
update aaa set a=b+c where d='b+c' from (select distinct d from aaa) t0
这个样子的,你看你是不是把几个单引号搞错了。我测试的结果是都会更新的。
declare @sql varchar(8000)
select @sql=''
select @sql='update aaa set a='+d+' where d='''+d+'''' from
(select distinct d from aaa) t0
print @sql --加上这一句看生成的SQL语句
exec (@sql)
更新的是b*c这一记录,如果将distinct去掉,更新的将是b-c。我再看看。
记录是这样
a b c d
1 1 2 b+c
1 2 3 b-c
1 23 2 b*c
按上面的sql按F5运行,就只更新一记录。
再去查查。
忘了看上面的select @sql=''
select @sql=@sql+'update aaa set a='+d+' where d='''+d+'''' from
(select distinct d from aaa) t0一定要加入@sql=@sql.....不过不明白的是t0是什么??顺便帮我解答下好吗?呆会儿结帐。