[交流]动态SQL语句

txlicenhe 2003-10-16 09:25:26
加精
稍做了一点总结,大家一起交流。
...全文
181 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymond323 2003-12-05
  • 打赏
  • 举报
回复
up
Devlopered 2003-12-01
  • 打赏
  • 举报
回复
up
946 2003-11-28
  • 打赏
  • 举报
回复
mark
stoway 2003-11-27
  • 打赏
  • 举报
回复
up
cgsun 2003-11-25
  • 打赏
  • 举报
回复
mark
PhilexPei 2003-11-12
  • 打赏
  • 举报
回复
做个记号
Shawphen2000 2003-11-07
  • 打赏
  • 举报
回复
收藏
8LY8Apollo 2003-10-19
  • 打赏
  • 举报
回复
up
lqityga 2003-10-18
  • 打赏
  • 举报
回复
狂顶不已!
diannetasp 2003-10-18
  • 打赏
  • 举报
回复
good
xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
如何在 Query Analyzer 中查看出ntext的字段全部值。
用 Select NtextField from TableNmae 看不完全。
yun198183 2003-10-18
  • 打赏
  • 举报
回复
up
txlicenhe 2003-10-17
  • 打赏
  • 举报
回复
to局长:
我开始也是这样想的,但后来发贴人说公式随时有可能改,后来就没有深究了。
aierong 2003-10-17
  • 打赏
  • 举报
回复
马兄弟辛苦啦,好文章呀
我足足看啦半个钟头
学习中


我用sql server数据库,库中有如下两表。
表t1保存不同类型人员在消费时的折扣计算公式及奖励积分计算公式,如下:
类型 折扣价 积分
一般会员 本次消费额* 0.95 积分+round(本次消费额/1000)
白银会员 本次消费额* 0.9 积分+round(本次消费额/1000)
黄金会员 本次消费额* 0.85 积分+round(本次消费额/1000)
钻石会员 本次消费额* 0.8 积分+round(本次消费额/1000)

表t2中保存人员的消费情况,并要根据t1中各对应字段公式计算其结果,如下:
会员编号 类型 本次消费额 折扣价 积分
002 白银会员 1520.00 0 0
005 黄金会员 3300.00 0 0
007 一般会员 350.00 0 0
034 钻石会员 520.00 0 0
002 白银会员 780.00 0 0

如上两表,在sql server查询分析器里我想用t1表中的公式直接用update命令计算出t2表中对应字段的值。命令如下:

update t2 set 折扣价=t1.折扣价,积分=t1.积分 from t1,t2 where t1.类型=t2.类型

可是执行时却提示说数据类型转换出错,因为t1表中的折扣价字段和积分字段为char型,保存的计算公式,可在t2表中的折扣份和积分字段却为数值型,所以出错。本人要如何才能实现如上算法。请高人们帮我看看我应如何做!查了一夜sql书也找不到办法,只能求教各位了。


create table #t1(类型 varchar(8),折扣价 varchar(100),积分 varchar(100))
insert #t1 select
'一般会员','本次消费额*0.95','积分+round(本次消费额/1000,0)'
Union all select
'白银会员','本次消费额*0.9','积分+round(本次消费额/1000,0)'
Union all select
'黄金会员','本次消费额*0.85','积分+round(本次消费额/1000,0)'
Union all select
'钻石会员','本次消费额*0.8','积分+round(本次消费额/1000,0)'

create table #t2(会员编号 char(3),类型 varchar(8),本次消费额 numeric(10,2),折扣价 numeric(10,2),积分 int)
insert #t2 select
'002','白银会员',1520.00, 0, 0
union all select
'005','黄金会员',3300.00, 0, 0
union all select
'007','一般会员',350.00, 0 , 0
union all select
'034','钻石会员',520.00, 0 , 0
union all select
'002','白银会员',780.00, 0 , 0

update a
set a.折扣价=a.本次消费额*b.moneys,a.积分=a.积分+round(a.本次消费额/1000,0)
from #t2 a
join (select 类型, convert(smallmoney,substring(折扣价,patindex('%[0-9]%',折扣价),len(折扣价))) moneys
from #t1) b
on a.类型=b.类型

select * from #t2

drop table #t1,#t2


这个问题看啦半天,用游标解决好像太浪费啦
我该了该,大家交流一下
虽然这不是动态语句的范围
vileboy 2003-10-17
  • 打赏
  • 举报
回复
up,学习
txlicenhe 2003-10-17
  • 打赏
  • 举报
回复
当然,如果字符串定义成 ntext/nchar/nvarchar 就不用在前面加 N 了,否则一定要加 N
aierong 2003-10-17
  • 打赏
  • 举报
回复
3: 输出参数
eg:
declare @num,
@sqls
set @sqls='select count(*) from '+@servername+'a.dbo.b'
exec(@sqls)
我如何能将exec执行的结果存入变量@num中

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from '+@servername+'.a.dbo.b'
exec sp_executesql @sqls,N'@a int output',@num output
select @num

有时候是不记得在Unicode 字符串前加N
这样写就不用加N

declare @num int,
@sqls nvarchar(4000),
@par nvarchar(4000)
select @par='@a int output', @sqls='select @a=count(*) from '+@servername+'.a.dbo.b'
exec sp_executesql @sqls,@par,@num output
select @num
啊呀 2003-10-17
  • 打赏
  • 举报
回复
这个N很有意思^_^
我有一次就没加,结果总调不过去,活活,惭愧

加一点,如果你是通过Ado连接数据库exec sp_executesql的话,
不用将"'"转换成“''”
如果转换了的话,一样会提示出错,不信你就试一下^_^
szocean 2003-10-17
  • 打赏
  • 举报
回复
hold
prcgolf 2003-10-17
  • 打赏
  • 举报
回复
强烈支持!!
加载更多回复(15)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧