大家帮我看看这段 存储过程 的代码有什么问题???

qibie 2008-10-18 11:05:55
Create proc selectALL
@tableName char(20),
@name char(20)
as
declare @sql varchar(1000)
if(@name = '')
set @sql='select * from '+@tableName
else
set @sql='select * from '+@tableName+' where name = '+@name

exec (@sql)
...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2008-10-19
  • 打赏
  • 举报
回复
因为你的name是char型,所以where条件里要加引号


Create proc selectALL
@tableName char(20),
@name char(20)
as
declare @sql varchar(1000)
if(@name = '')
set @sql='select * from '+@tableName
else
set @sql='select * from '+ltrim(rtrim(@tableName))+' where name = '+''''+ltrim(rtrim(@name))+''''
PRINT @SQL
exec (@sql)
qibie 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 josy 的回复:]
因为你的tableName和name定义的长度均为20,tableName倒没所谓,如果是name不加ltrim 和 rtrim的话,就会变成这样:

select * from tableName where name =' name';

这显然不是你想要的
[/Quote]

谢谢你,你是我们新人的福星

顶你
百年树人 2008-10-19
  • 打赏
  • 举报
回复
因为你的tableName和name定义的长度均为20,tableName倒没所谓,如果是name不加ltrim 和 rtrim的话,就会变成这样:

select * from tableName where name =' name';

这显然不是你想要的
qibie 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 josy 的回复:]
因为你的name是char型,所以where条件里要加引号


SQL code
Create proc selectALL
@tableName char(20),
@name char(20)
as
declare @sql varchar(1000)
if(@name = '')
set @sql='select * from '+@tableName
else
set @sql='select * from '+ltrim(rtrim(@tableName))+' where name = '+''''+ltrim(rtrim(@name))+''''
PRINT @SQL
exec (@sql)
[/Quote]

请问,第二段的表名和条件为什么要加上 ltrim 和 rtrim 两个函数,起什么作用啊
水族杰纶 2008-10-18
  • 打赏
  • 举报
回复
--语法没什么问题

34,575

社区成员

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

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