存储过程里面表名是变量的问题

Danfor 2003-10-09 03:27:43
ALTER PROCEDURE teststr @input varchar(50)
AS
declare @pp1 varchar(50),
@pp2 varchar(50),
@pp3 varchar(50)
--set @pp1= 'select * from ' + @input
--exec (@pp1)
--上面这样是可以的,但是如果我想要返回的结果不是*,像下面这样

set @pp3 = ' where b='haha''--这里的'怎么转意?'haha'
set @pp1= 'select @pp2=a from ' + @input + @pp3
exec (@pp1)
--我的意思是想把b列为'haha'的项里面的a列内容付给@pp2

谢谢大家!
...全文
58 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-10-09
  • 打赏
  • 举报
回复
ALTER PROCEDURE teststr @input varchar(50)
AS
declare @pp1 varchar(50),
@pp2 varchar(50),
@pp3 varchar(50)

set @pp3 = ' where b=''haha'''
set @pp1= 'select @pp2=a from '+@input+ @pp3

exec sp_executesql @pp1 ,N'@pp2 varchar(50) output',@pp2 output

select @pp2 结果
Danfor 2003-10-09
  • 打赏
  • 举报
回复
可以了,谢谢大家,给分。
execute sp_executesql @pp1 ,N'@pp2 varchar(500) output', N'@pp4 varchar(500) output', @pp2 output, @pp4 output
我写错了。
Danfor 2003-10-09
  • 打赏
  • 举报
回复
谢谢大家,如果我要选两列出来怎么写?
ALTER PROCEDURE teststr @input nvarchar(50)
AS
declare @pp1 nvarchar(500), --我注意到了,谢谢
@pp2 varchar(500),
@pp3 nvarchar(500), --这个不用该吧
@pp4 varchar(500) --我新加的
set @pp3 = ' where b=''haha''' --谢谢
set @pp1= 'select @pp2=a ,@pp4=c from ' + @input + @pp3 --我想多选一列
execute sp_executesql @pp1 ,N'@pp2 varchar(50) output',@pp2 output--????这句怎么写?
--execute sp_executesql @pp1 ,N'@pp2 varchar(50) output', N'@pp2 varchar(50) output', @pp2 output, @pp4 output 这么写不行,不明白N的意思,请教大家,完事给分

Wally_wu 2003-10-09
  • 打赏
  • 举报
回复
不太明白你的意思,
aierong 2003-10-09
  • 打赏
  • 举报
回复
ALTER PROCEDURE teststr @input nvarchar(50)
AS
declare @pp1 nvarchar(500),
@pp2 varchar(50),
@pp3 nvarchar(50)
set @pp3 = ' where b=''haha'''
set @pp1= 'select @pp2=a from ' + @input + @pp3
execute sp_executesql @pp1 ,N'@pp2 varchar(50) output',@pp2 output



好像来晚啦,请楼主注意数据类型nvarchar
Dennis618 2003-10-09
  • 打赏
  • 举报
回复
添加SET QUOTED_IDENTIFIER OFF令"雙引號可用改為

SET QUOTED_IDENTIFIER OFF

--set @pp3 = ' where b='haha''--这里的'怎么转意?'haha'
--上面這句改為
set @pp3=" where b='haha'" --用雙引號引用
set @pp1= 'select @pp2=a from ' + @input + @pp3
exec (@pp1)

SET QUOTED_IDENTIFIER ON
zjcxc 元老 2003-10-09
  • 打赏
  • 举报
回复
ALTER PROCEDURE teststr @input varchar(50)
AS
declare @pp1 nvarchar(500), --将定义改为nvarchar
@pp2 varchar(50),
@pp3 varchar(50)
set @pp3 = ' where b=''haha'''--这里的'怎么转意?'haha'
set @pp1= 'select @pp2=a from ' + @input + @pp3
exec sp_executesql @pp1 ,N'@pp2 varchar(50) output',@pp2 output
youngby 2003-10-09
  • 打赏
  • 举报
回复
学习。不过是是看不懂呀。
zhbname 2003-10-09
  • 打赏
  • 举报
回复
up
youngby 2003-10-09
  • 打赏
  • 举报
回复
不太明白你的意思
^_^


ALTER PROCEDURE teststr @tableName varchar(50),@inputColumnsName varchar(225)
AS
declare @pp1 varchar(50),
set @pp1= 'select' + @inputColumnsName + ' from '+ @TableName
exec (@pp1)
愉快的登山者 2003-10-09
  • 打赏
  • 举报
回复
ALTER PROCEDURE teststr @input varchar(50)
AS
declare @pp1 varchar(50),
@pp2 varchar(50),
@pp3 varchar(50)
set @pp3 = ' where b=''haha'''--这里的'怎么转意?'haha'
set @pp1= 'select @pp2=a from ' + @input + @pp3
exec sp_executesql @pp1 ,N'@pp2 varchar(50) output',@pp2 output
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
eg:
declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from '+@tablename
exec sp_executesql @sqls,N'@a int output',@num output
select @num

伍子V5 2003-10-09
  • 打赏
  • 举报
回复
set @pp3 = ' where b='haha''--这里的'怎么转意?'haha'
set @pp1= 'select '+@pp2+'=a from ' + @input + @pp3
exec (@pp1)

34,587

社区成员

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

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