请大家帮忙,一个用变量为表名、字段名的存储过程不能返回结果,谢谢大家

peng0731 2005-07-25 02:03:48
有一个sqlserver存储过程如下:功能为根据某个编码返回值
ALTER PROCEDURE dbo.GetNameById
@sId varchar(20), --传入条件Id的值
@sCondition varchar(20), --匹配条件Id的对应字段名
@sSelTab varchar(50), --要查找的表名
@sSelName varchar(400), --要得到值的相关字段名
@@retName nvarchar(400) output --需要传回的@selName字段的值
AS
begin
declare @sql nvarchar(1000) --生成的sql语句
set @sql='select '+@@retName+'='+@sSelName+' From '+@sSelTab+' Where '+@sCondition+'='+@sId
exec sp_executesql @sql
--set @@retName = isnull(@@retName,'124')
end
RETURN
调用存储过程的时候没有返回值,而直接写成sql语句查询的时候,是有值的,是不是折段代码有问题?请大家帮忙看看,谢谢!
我调用的代码如下:
declare @xx varchar(400)
exec baseoper_getnamebyid '000000000011','tId','tTable','tName', @@retName = @xx output
print 'aa'+ @xx
结果没有任何参数,我在存储过程里最后加一句:set @@retName = isnull(@@retName,'124')
结果才显示为:aa124
...全文
130 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
peng0731 2005-07-25
多谢 paoluo(一天到晚游泳的鱼) ,问题终于解决了,马上结帖
  • 打赏
  • 举报
回复
paoluo 2005-07-25
@sId是一个字符串,在组合成动态语句的时候语句要做下处理。
  • 打赏
  • 举报
回复
paoluo 2005-07-25
@sId是一股额字符串,在组合成动态语句的时候语句要做下处理。
  • 打赏
  • 举报
回复
paoluo 2005-07-25
再试试

ALTER PROCEDURE dbo.GetNameById
@sId varchar(20), --传入条件Id的值
@sCondition varchar(20), --匹配条件Id的对应字段名
@sSelTab varchar(50), --要查找的表名
@sSelName varchar(400), --要得到值的相关字段名
@@retName nvarchar(400) output --需要传回的@selName字段的值
AS
begin
declare @sql nvarchar(1000) --生成的sql语句
set @sql='select @@retName='+@sSelName+' From '+@sSelTab+' Where '+@sCondition+'='''+@sId+''''
exec sp_executesql @sql,
N'@@retName nvarchar(400) output',
@@retName output
--set @@retName = isnull(@@retName,'124')
end
RETURN
  • 打赏
  • 举报
回复
phantomMan 2005-07-25
你的列名输入错误
  • 打赏
  • 举报
回复
peng0731 2005-07-25
多谢 libin_ftsafe(子陌红尘) 的帮助,可是还是出错啊
调用的时候提示:列名 '000000000011' 无效。
  • 打赏
  • 举报
回复
子陌红尘 2005-07-25
ALTER PROCEDURE dbo.GetNameById
@sId varchar(20), --传入条件Id的值
@sCondition varchar(20), --匹配条件Id的对应字段名
@sSelTab varchar(50), --要查找的表名
@sSelName varchar(400), --要得到值的相关字段名
@@retName nvarchar(400) output --需要传回的@selName字段的值
AS
begin
declare @sql nvarchar(1000) --生成的sql语句
set @sql='select @@retName='+@sSelName+' From '+@sSelTab+' Where '+@sCondition+'='+@sId
exec sp_executesql @sql,
N'@@retName nvarchar(400) output',
@@retName output
--set @@retName = isnull(@@retName,'124')
end
RETURN
  • 打赏
  • 举报
回复
peng0731 2005-07-25
不好意思,些错了,调用的语句是:
declare @xx varchar(400)
exec getnamebyid '000000000011','tId','tTable','tName', @@retName = @xx output
print 'aa'+ @xx
  • 打赏
  • 举报
回复
相关推荐
帮助那些想尽快学习存储过程 实例:create PROCEDURE pagination @tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @pagecount int output, -- 返回页总数, 非 0 值则返回 --@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(1500) = '1=1' -- 查询条件 (注意: 不要加 where) AS declare @sql nvarchar(2000) --获得表中所有记录的条数 declare @recordcount int declare @getcountsql nvarchar(2000) set @getcountsql = N'select @count = count(*) from ' + @tblName + N' where ' + @strWhere exec sp_executesql @getcountsql,N'@count int output',@count=@recordcount output if @recordcount=0 begin set @pagecount = 0 return end declare @lastcount int set @lastcount = @recordcount % @PageSize if @lastcount = 0 set @pagecount = @recordcount / @PageSize else set @pagecount = @recordcount / @PageSize + 1 if @lastcount = 0 or @pageindex < @pagecount begin set @sql = N'select ' + @strGetFields + N' from (select top ' + convert(nvarchar(4),@PageSize) + N' * from (select top ' + convert(varchar(10),@PageSize*@PageIndex) + N' * from ' + @tblName + N' where ' + @strWhere + N' order by ' +@fldName+ N') as t order by ' + @fldName + ' desc) as tt order by ' + @fldName end else begin if @lastcount != 0 and @pageindex = @pagecount begin set @sql = N'select ' + @strGetFields + N' from (select top ' + convert(nvarchar(4),@lastcount) + N' * from (select top ' + convert(varchar(10),@PageSize*@PageIndex) + N' * from ' + @tblName + N' where ' + @strWhere + N' order by ' +@fldName+ N') as t order by ' + @fldName + ' desc) as tt order by ' + @fldName end end print @sql exec sp_executesql @sql go select * from authors declare @pagecount int exec pagination 'authors','*','au_id',5,1, @pagecount output,'state=''CA''' print @pagecount
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2005-07-25 02:03
社区公告
暂无公告