存储过程的语句中如何使用变量,主要是变量代入。

ppxstar 2009-03-11 04:03:05
declare @sql varchar(8000)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + 字段 + ''' then Result else 0 end) [' + 字段 + ']'
from (select distinct 字段 from 字段表) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)

如上面代码

我想把用汉字写的位置用一些来变量代替,请问要怎么写?
...全文
147 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hui_hui_2007 2009-03-11
  • 打赏
  • 举报
回复
use northwind
declare @str varchar(100)
,@strtable varchar(100)

set @strtable='orders'
set @str='select * from ' + @strtable
exec (@str)
ks_reny 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ppxstar 的回复:]
提示关键字 'from' 附近有语法错误。
[/Quote]
你用 print(@sql) 看一下最后的sql语句是否正确,注意语句之间要有空格。
ppxstar 2009-03-11
  • 打赏
  • 举报
回复
提示关键字 'from' 附近有语法错误。
ppxstar 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ks_reny 的回复:]
引用 5 楼 ks_reny 的回复:
declare @sql varchar(8000)
declare @clounm varchar(20)
declare @tablename varchar(20)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + @clounm + ''' then Result else 0 end) [' +@clounm + ']' +'from (select distinct'+@clounm+' from'+ @tablename+') as a '
set @sql = @sql + ' from tb group by name'
exec(@sql)
[/Quote]

这种写法我也试过,也是不成功的
ks_reny 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ppxstar 的回复:]
引用 5 楼 ks_reny 的回复:
SQL code
declare @sql varchar(8000)
declare @clounm varchar(20)
declare @tablename varchar(20)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + @clounm + ''' then Result else 0 end) [' +@clounm + ']'
from (select distinct @clounm from @tablename) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)


这样的代…
[/Quote]
不好意思 from (select distinct @clounm from @tablename) as a 這個剛才沒有加引號

declare @sql varchar(8000)
declare @clounm varchar(20)
declare @tablename varchar(20)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + @clounm + ''' then Result else 0 end) [' +@clounm + ']' +'from (select distinct'+@clounm+' from'+ @tablename+') as a '
set @sql = @sql + ' from tb group by name'
exec(@sql)
ppxstar 2009-03-11
  • 打赏
  • 举报
回复
我要做十几个相类似的报表,代码全都一样,只是对应的表和字段不同而已,如果我的方法实现不了,那有什么办法能解决呢?
ppxstar 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]

得根据表的字段名来顶,不能随便改.除非你的字段跟着表走.
[/Quote]

什么意思呀,是不是说我要的这种功能根本不可能实现的?
叶子 2009-03-11
  • 打赏
  • 举报
回复
汉字部分替换成变量就可以。
ppxstar 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ks_reny 的回复:]
SQL code
declare @sql varchar(8000)
declare @clounm varchar(20)
declare @tablename varchar(20)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + @clounm + ''' then Result else 0 end) [' +@clounm + ']'
from (select distinct @clounm from @tablename) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
[/Quote]

这样的代码已经试过,不成功。
错误提示如下

必须声明表变量 "@tablename"。
ks_reny 2009-03-11
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
declare @clounm varchar(20)
declare @tablename varchar(20)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + @clounm + ''' then Result else 0 end) [' +@clounm + ']'
from (select distinct @clounm from @tablename) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
lanmengxjh 2009-03-11
  • 打赏
  • 举报
回复
定义变量
然后直接把汉字部分替换成变量就可以了.
最简单的测试方法是print你的语句...
wangshunqi 2009-03-11
  • 打赏
  • 举报
回复
顶起关注
pt1314917 2009-03-11
  • 打赏
  • 举报
回复
这个改动还得看楼主具体需求是什么样的,
dawugui 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 ppxstar 的帖子:]
declare @sql varchar(8000)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Subject when ''' + 字段 + ''' then Result else 0 end) [' + 字段 + ']'
from (select distinct 字段 from 字段表) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)

如上面代码

我想把用汉字写的位置用一些来变量代替,请问要怎么写?
[/Quote]
得根据表的字段名来顶,不能随便改.除非你的字段跟着表走.

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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