一个sql语句的写法,高分求助!急

yang25323 2005-01-02 10:48:07
exec('select '+@temp+'='+@ColumnName+' from '+@tableName
+ ' where ID='''+@ID+'''')
这是一个存储过程中的一部分,想实现的功能是将@tableName表中的指定行@ColumnName列中内容取出赋给@temp.表名和列名都是变量,@temp写在引号里和外都不行,请问怎么实现这个功能?
...全文
100 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
NinGoo 2005-01-02
  • 打赏
  • 举报
回复
动态sql要想传出变量,需要使用sp_executesql,就像冷月无声写的,呵呵
didoleo 2005-01-02
  • 打赏
  • 举报
回复
--改一下,类型和output之间没有','
declare @ColumnName .... --<--你的具体类型
declare @tableName .... --<--你的具体类型
declare @ID .... --<--你的具体类型
declare @s nvarchar(4000)
set @ColumnName='...'
set @tableName='...'
set @ID=....
set @s='select @temp='+@ColumnName+' from '+@tableName+' where ID=@ID'
exec sp_executesql @s,N'@temp 类型 output,@ID 类型',@temp output,@ID
select @temp
didoleo 2005-01-02
  • 打赏
  • 举报
回复
declare @ColumnName .... <--你的具体类型
declare @tableName .... <--你的具体类型
declare @ID .... <--你的具体类型
declare @s nvarchar(4000)
set @ColumnName='...'
set @tableName='...'
set @ID=....
set @s='select @temp='+@ColumnName+' from '+@tableName+' where ID=@ID'
exec sp_executesql @s,N'@temp 类型,output,@ID 类型',@temp output,@ID
select @temp
yang25323 2005-01-02
  • 打赏
  • 举报
回复
sp_executesql这个存储过程我还没用过,回去翻翻.呵呵
didoleo 2005-01-02
  • 打赏
  • 举报
回复
--哦,对了,看到楼主还比我多一个变量在where子句中,我也给他加上吧,加了个@employeeid
declare @tablename varchar(100)
declare @fieldname varchar(100)
declare @employeeid int
declare @m_field nchar(100)
declare @s nvarchar(4000)
set @tablename='Orders'
set @fieldname='CustomerID'
set @employeeid=5
set @s='select @m_field='+@fieldname+' from '+@tablename+' where employeeID=@employeeid'
exec sp_executesql @s,N'@m_field nchar(100) output, @employeeid int',@m_field output,@employeeid
select @m_field
yang25323 2005-01-02
  • 打赏
  • 举报
回复
看起来好像可以,我也想过用表,但我定义的是表变量
所以还是没绕过这个问题,没想过建一个物理表
我过会回去试试看
子陌红尘 2005-01-02
  • 打赏
  • 举报
回复
楼上的方法好
didoleo 2005-01-02
  • 打赏
  • 举报
回复
--用sql自带的northwind库的orders做例子
declare @tablename varchar(100)
declare @fieldname varchar(100)
declare @m_field nchar(100)
declare @s nvarchar(4000)
set @tablename='Orders'
set @fieldname='CustomerID'
set @s='select @m_field='+@fieldname+' from '+@tablename+' where employeeID=5'
exec sp_executesql @s,N'@m_field nchar(100) output',@m_field output
select @m_field
子陌红尘 2005-01-02
  • 打赏
  • 举报
回复
借助临时表:

exec('select '+@ColumnName+' as cols from into t '+@tableName
+ ' where ID='''+@ID+'''')

select @temp = cols from t

drop table t
yingqing 2005-01-02
  • 打赏
  • 举报
回复
用sp_executesql,因為exec()裡面不能夠還含有變量@temp
yang25323 2005-01-02
  • 打赏
  • 举报
回复
谢谢各位了
lvenx 2005-01-02
  • 打赏
  • 举报
回复
set sql='select '+@temp+'='+@ColumnName+' from '+@tableName
+ ' where ID='''+@ID+''''
exec sp_executesql @s,N'@temp 类型 output,@ID 类型',@temp output,@ID

34,594

社区成员

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

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