sql能使字符變成變量嗎?

s_111111 2009-03-19 05:33:44
例:
有4個字符串
字符串變量CHARNAME1 值是"我是第一個變量"
字符串變量CHARNAME2 值是"我是第二個變量"
字符串變量CHARNAME3 值是"我是第三個變量"
字符串變量C_name 值是可變的,他的值可能是下面的三個字符串
1."CHARNAME1"
2."CHARNAME2"
3."CHARNAME3"

根據字符串變量C_name的值來調用變量
當字符串變量C_name的值是1."CHARNAME1" 調用變量CHARNAME1
當字符串變量C_name的值是2."CHARNAME2" 調用變量CHARNAME2
當字符串變量C_name的值是3."CHARNAME3" 調用變量CHARNAME3

請問各位大俠,怎么實現?
...全文
166 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2009-04-28
  • 打赏
  • 举报
回复

declare @i int
set @i=1; --如果是1就是选第一个变量
declare @sql varchar(300)
set @sql='
declare @charname1 varchar(20)
set @charname1 =''chinese_one''
declare @charname2 varchar(20)
set @charname2 =''chinese_two''
declare @charname3 varchar(20)
set @charname3 =''chinese_three''
select @charname'+cast(@i as varchar(6))+' as choosed'
exec(@sql)

/*
choosed
--------------------
chinese_one
*/

叶子 2009-04-28
  • 打赏
  • 举报
回复

declare @i int
set @i=2; --如果是1就是选第一个变量
declare @sql varchar(300)
set @sql='
declare @charname1 varchar(20)
set @charname1 =''chinese_one''
declare @charname2 varchar(20)
set @charname2 =''chinese_two''
declare @charname3 varchar(20)
set @charname3 =''chinese_three''
select @charname'+cast(@i as varchar(6))+' as choosed'
exec(@sql)

/*
choosed
--------------------
chinese_two
*/

我刚测试过可以执行。
tengjian1981 2009-04-28
  • 打赏
  • 举报
回复

declare @charname1 varchar(20)
set @charname1 ='我是第一個變量'
declare @charname2 varchar(20)
set @charname2 ='我是第二個變量'
declare @charname3 varchar(20)
set @charname3 ='我是第三個變量'
declare @c_name varchar(20)
set @c_name='charname3'; --如果是1就是选第一个变量
declare @sql varchar(300)
set @sql='
declare @charname1 varchar(20)
declare @charname2 varchar(20)
declare @charname3 varchar(20)
set @charname1='''+@charname1+'''
set @charname2='''+@charname2+'''
set @charname3='''+@charname3+'''
select @'+@c_name+' as 所选變量'
exec(@sql)
火星求索 2009-04-28
  • 打赏
  • 举报
回复
但是,可但是,但可是
s_111111 2009-04-28
  • 打赏
  • 举报
回复
樓上2位的意思我明白,就是要把需要轉換的變量(charname1、@charname1……)在@SQL變量里面定義才能跑出來,如果要轉的變量很多那不是會寫死人,而且有的要轉換變量你也不一定知道它的值的,那不是還有問題?
不過還是要謝謝你!
s_111111 2009-04-03
  • 打赏
  • 举报
回复
附上代碼

declare @charname1 varchar(20)
set @charname1 ='我是第一個變量'
declare @charname2 varchar(20)
set @charname2 ='我是第二個變量'
declare @charname3 varchar(20)
set @charname3 ='我是第三個變量'
declare @c_name varchar(20)
set @c_name='charname3'; --如果是1就是选第一个变量
declare @sql varchar(300)
set @sql='
select @'+@c_name+' as 所选變量'
exec(@sql)

訊息 137,層級 15,狀態 2,行 2
必須宣告純量變數 "@charname3"。
s_111111 2009-04-03
  • 打赏
  • 举报
回复
也許我說的那個意思不是很明白,現在我簡單說下我的意思:
把字符變量里面的值作為變量
比如一個變量X,他的變量名和類型不確定,但是他是有值的。
另有一個字符變量Y,他的值是X變量的變量名。
我希望能從變量Y抓到變量X的值。
這樣是可行的嗎?如果可行,代碼如何實現?
s_111111 2009-04-03
  • 打赏
  • 举报
回复
HELP
-狙击手- 2009-04-02
  • 打赏
  • 举报
回复
declare @CHARNAME1 varchar(50)
set @charname1 = '我是第1個變量'
declare @CHARNAME2 varchar(50)
set @charname2 = '我是第2個變量'
declare @CHARNAME3 varchar(50)
set @charname3 = '我是第3個變量'

declare @t table(id int,C_name varchar(10))
insert @t
select 1,'CHARNAME1' union all
select 2,'CHARNAME2' union all
select 3,'CHARNAME3'

select * ,case C_name when 'CHARNAME1' then @charname1
when 'CHARNAME2' then @charname2
when 'CHARNAME3' then @charname3 end
from @t


id C_name
----------- ---------- --------------------------------------------------
1 CHARNAME1 我是第1個變量
2 CHARNAME2 我是第2個變量
3 CHARNAME3 我是第3個變量

s_111111 2009-04-02
  • 打赏
  • 举报
回复
不好意思了各位。因為忙其他事,一直沒有回覆。
其實我的意思就是4樓所說的那個意思——"把字段值作为变量名"
10樓的朋友這個SQL好像不能執行,我也感覺要用動態查詢,不過好像就是執行上會有點問題。
s_111111 2009-04-02
  • 打赏
  • 举报
回复
不好意思了各位。因為忙其他事,一直沒有回覆。
其實我的意思就是4樓所說的那個意思——"把字段值作为变量名"
10樓的朋友這個SQL好像不能執行,我也感覺要用動態查詢,不過好像就是執行上會有點問題。
叶子 2009-03-20
  • 打赏
  • 举报
回复

declare @i int
set @i=1; --如果是1就是选第一个变量
declare @sql varchar(300)
set @sql='
declare @charname1 varchar(20)
set @charname1 =''我是第一個變量''
declare @charname2 varchar(20)
set @charname2 =''我是第二個變量''
declare @charname3 varchar(20)
set @charname3 =''我是第三個變量''
select @charname'+cast(@i as varchar(6))+' as 所选變量'
exec(@sql)

dawugui 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 s_111111 的帖子:]
例:
有4個字符串
字符串變量CHARNAME1 值是"我是第一個變量"
字符串變量CHARNAME2 值是"我是第二個變量"
字符串變量CHARNAME3 值是"我是第三個變量"
字符串變量C_name 值是可變的,他的值可能是下面的三個字符串
1."CHARNAME1"
2."CHARNAME2"
3."CHARNAME3"

根據字符串變量C_name的值來調用變量
當字符串變量C_name的值是1."CHARNAME1" 調用變量CHARNAME1
當字符串變量C_name的值是2."CHARNAME2" 調…
[/Quote]
不太明白你的具体意思,估计是拼接SQL语句,动态查询了.
htl258_Tony 2009-03-19
  • 打赏
  • 举报
回复
不好理解,帮顶。按我的想法是像5楼的那个意思。
ljluck7687 2009-03-19
  • 打赏
  • 举报
回复
没有明白楼主的意思。

代码是?
case C_name
when "CHARNAME1" then call CHARNAME1
when "CHARNAME2" then call CHARNAME2
when "CHARNAME3" then call CHARNAME3
end
kye_jufei 2009-03-19
  • 打赏
  • 举报
回复

select top 1 case pmc_kb when pmc_Cb then '我是第一個變量'
when pmc_Kb then '我是第二個變量'
when pmc_Xb then '我是第三個變量' end as C from wko_epmc

/*
C
--------------
我是第二個變量

(1 個資料列受到影響)

*/
ai_li7758521 2009-03-19
  • 打赏
  • 举报
回复
???
--定义变量
declare @CHARNAME1 nvarchar(30),@CHARNAME2 nvarchar(30),@CHARNAME3 nvarchar(30),@C_name nvarchar(30)

--设定变量的值
select @CHARNAME1='我是第一個變量', @CHARNAME2='我是第二個變量', @CHARNAME3='我是第三個變量',@C_name='CHARNAME1'


select case @C_name when 'CHARNAME1' then @CHARNAME1
when 'CHARNAME2' then @CHARNAME2
when 'CHARNAME3' then @CHARNAME3 end
百年树人 2009-03-19
  • 打赏
  • 举报
回复
楼主貌似说的是把字段值作为变量名?
-狙击手- 2009-03-19
  • 打赏
  • 举报
回复
Andy__Huang 2009-03-19
  • 打赏
  • 举报
回复
如果在存储过程里,就用if语句来判断;
如果在sql语句里,就用case when ... then ... else ...end语句来判断;

这些都是很常用到的

加载更多回复(1)

34,838

社区成员

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

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