首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个存储过程+wildcard的疑问

2013-09-06 
请教一个存储过程+wildcard的疑问本帖最后由 suanleba10 于 2013-08-20 11:49:07 编辑proc:create proc pr

请教一个存储过程+wildcard的疑问
本帖最后由 suanleba10 于 2013-08-20 11:49:07 编辑 proc:


create proc proc_default_var
@Id varchar(10)='%',
@Sex varchar(10)='%'
as
select * from Customer
where CustomerId=@Id and Sex=@Se


exec:

#1 exec proc_default_var 'aa', 'male'
#2 exec proc_default_var '14', 'male'

执行exec下的sql语句#1后报错
Conversion failed when converting the varchar value 'aa' to data type int.
执行exec下的sql语句#2后正常
但是,
在stored_proc里@Id定义的是‘varchar'类型。
提问:
1)这种通配符@Id varchar(10)='%',一定是varchar类型? 如果建表时定义的@Id是int类型,也可以匹配到?
2) 在proc里定义了@Id varchar(10)='%',如果建表时定义的是@Id int,为什么执行时给@Id赋值为int类型就能正确执行,而赋值为varchar类型则出现类型不匹配的问题?


types of table's elems 
    
create table Customer
(
   CustomerID int not null primary key,
   CustomerName varchar(10),
   Sex varchar(10)
 )

[解决办法]
补充下,上面的#1中说:如果字段是其它类型,系统会试着转换为字符类型去比较。不妥。
应该说:系统会根据左右两边数据类型的优先级进行转换。但数据类型的转换往往伴随着效率问题及BUG的产生。所以建议存储过程中的参数类型,一定要定义成和字段类型一模一样。参考版主的博文:
http://blog.csdn.net/dba_huangzj/article/details/7883090

热点排行