Sql 查询返回正确的结果,而存储过程不返回。需要第二副眼睛吗
我的问题是:Sql 查询返回正确的结果,而存储过程不返回。需要第二副眼睛吗,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我的问题是: select * from meet_cert_credit where conf_number = '1132' and type_of_professional = 'Certified Hazardous Materials Managers' 我的存储过程: ALTER PROCEDURE [dbo].[sp_check_credit_info] @cn varchar = NULL, @top varchar = NULL AS BEGIN SET
select
*
from
meet_cert_credit
where
conf_number = '1132'
and type_of_professional = 'Certified Hazardous Materials Managers'
我的存储过程:
ALTER PROCEDURE [dbo].[sp_check_credit_info]
@cn varchar = NULL,
@top varchar = NULL
AS
BEGIN
SET NOCOUNT ON;
select
*
from
meet_cert_credit
where
Conf_number = @cn
and type_of_professional = @top
END
调用我的存储过程:
exec sp\u check\u credit\u info“1132”、“认证危险品经理”
运行查询时,它将返回结果。运行存储过程时,我什么也得不到
我疯了吗?您需要为
varchar
存储过程参数指定一个长度
e、 g.使用@cn varchar(30)
而不是@cn varchar
当前,您传入的所有内容都被截断为1个字符,因此您可以有效地执行以下搜索
select
*
from
meet_cert_credit
where
Conf_number = '1'
and type_of_professional = 'C'
因此没有结果。Wow。谢谢你的第二双眼睛+1,我认为未指定长度的
varchar
strings的默认值是30,但在这里它被截断为1个字符,试试看:declare@x varchar;设置@x='123456789+123456789+123456789+123456789+123456789+';选择故事的@x
moral,始终指定字符串的长度@KM-是的,CAST(@X AS VARCHAR)
默认值为30,但由于某些原因,在本文中它是1。我总是在参数上定义长度以避免错误(如果字符串>字段大小)。截断是一个很酷的小道消息。@Shannon-是的,可能与此无关,在SQL Server存储过程中,以sp\u开头的名称是为系统存储过程保留的。请参阅第页的“命名存储过程”