存储过程参数问题?

wanzhao76 2006-01-10 10:20:44
Create Procedure A(@p varchar)
as
select b from a where b='bb'
-----------------------------
执行,有一条bb记录。

但是换成:
Create Procedure A(@p varchar)
as
select b from a where b=@p
-----------------------------
然后测试,将@p赋值 bb,但是没有记录。


为什么?太奇怪了。


...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyun67 2006-01-11
  • 打赏
  • 举报
回复
我觉得也是传参有问题
bugchen888 2006-01-11
  • 打赏
  • 举报
回复
wangtiecheng(cappuccino)正解,在声明参数的数据类型时要指明其长度,否则系统默认都是1位长.
OracleRoob 2006-01-11
  • 打赏
  • 举报
回复
Create Procedure A(@p varchar)
as
select b from a where b='bb'
-----------------------------
执行,有一条bb记录。
--因为没有使用到参数

但是换成:
Create Procedure A(@p varchar)
as
select b from a where b=@p
-----------------------------
然后测试,将@p赋值 bb,但是没有记录。
--这是因为参数@p没有说明长度,系统只取第一个字符,应该说明长度


Create Procedure A(@p varchar(20)) --这样就能查询到
as
select b from a where b=@p
rfq 2006-01-11
  • 打赏
  • 举报
回复
我觉得程序没错
ReViSion 2006-01-10
  • 打赏
  • 举报
回复
Create Procedure A(@p varchar)
as
select b from a where b=@p
----------------------------------------
没道理呀,这也会错
是不是要对@P作一下处理,不过我不知道你是怎么传参数的,哈哈


$扫地僧$ 2006-01-10
  • 打赏
  • 举报
回复
create table a
(
b varchar(10)
)

insert A select 'bb'

create proc T_A(@p varchar(10))
as
select b from a where b=@p

exec T_A 'bb'

$扫地僧$ 2006-01-10
  • 打赏
  • 举报
回复
create proc T_A(@p varchar(10))
as
select b from a where b=@p
lw1a2 2006-01-10
  • 打赏
  • 举报
回复
用动态SQL:

Create Procedure A(@p varchar)
as
declare @sql varchar(2000)
set @sql='select b from a where b='''+@p+''''
exec(@sql)

34,593

社区成员

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

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