查询返回正确的结果,存储过程没有.需要第二组眼睛

etm*_*124 3 sql t-sql sql-server-2005

我的查询:

select
  *
from
  meet_cert_credit
where
  conf_number = '1132'
  and type_of_professional = 'Certified Hazardous Materials Managers'
Run Code Online (Sandbox Code Playgroud)

我的存储过程:

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
Run Code Online (Sandbox Code Playgroud)

调用我的存储过程:

exec sp_check_credit_info '1132', 'Certified Hazardous Materials Managers'

运行查询时,它返回结果.运行存储过程时,我什么也得不到.

我疯了吗?

Mar*_*ith 9

您需要为varchar存储过程参数指定长度.

例如,@cn varchar(30)不要使用@cn varchar

目前您传入的所有内容都被截断为1个字符,因此您实际上正在进行以下搜索.

select 
    * 
from 
    meet_cert_credit 
where 
    Conf_number = '1' 
    and type_of_professional = 'C'
Run Code Online (Sandbox Code Playgroud)

因此没有结果.

  • +1,我认为未指定长度`varchar`字符串的默认值是30,但是这里它被截断为1个char,试试看:`declare @x varchar; 设置@ x ='123456789 + 123456789 + 123456789 + 123456789 +';选择@ x`**故事的道德,总是指定字符串的长度!!!** (2认同)