Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询返回正确的结果,而存储过程不返回。需要第二副眼睛吗_Sql_Sql Server 2005_Tsql - Fatal编程技术网

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开头的名称是为系统存储过程保留的。请参阅第页的“命名存储过程”