1

我在我的一个项目中使用以下过程。

create procedure [dbo].[SMSStudentSelect2]
@Sorp char(20)
as
begin
   select @Sorp PhoneNo from Students 
   where DATALENGTH(@Sorp) = 11 and ClassId = 1 
   and GRNo not in(select GRNo from Discharge)
end

我的问题是:当我SPhoneNo输入参数时@Sorp,我没有得到任何结果,而当我直接使用SPhoneNo即我使用查询时

select SPhoneNo from Students where DATALENGTH(SPhoneNo) = ......... 

在我的程序中,我得到了不想要的结果

谁能解决我的问题???

4

4 回答 4

3

根据评论进行编辑以确定 OP 想要什么:

尝试这样的事情:

create procedure [dbo].[SMSStudentSelect2]
@Sorp char(1) --"S" returns the SPhoneNo, "P" returns the PPhoneNo
as
begin
   select
       CASE
           WHEN @Sorp='S' THEN SPhoneNo 
           ELSE PPhoneNo 
       END AS PhoneNo
       from Students 
       where DATALENGTH(@Sorp) = 11 and ClassId = 1 
           and GRNo not in(select GRNo from Discharge)
end

传入“S”或“P”以获取您想要的列。

于 2012-04-23T12:28:11.280 回答
0

你不是在这里缺少一个 = 符号:

select @Sorp = PhoneNo
于 2012-04-23T12:22:28.490 回答
0

谢谢KM。正如 Mikael Eriksson 建议的那样,我也使用了数据长度的情况。我的问题解决如下

alter procedure [dbo].[SMSStudentSelect2]
@Sorp char(1) --"S" returns the SPhoneNo, "P" returns the PPhoneNo
as
begin
   select
       CASE
           WHEN @Sorp='S' THEN SPhoneNo 
           ELSE PPhoneNo 
       END AS PhoneNo
       from Students 
       where DATALENGTH(case when @Sorp = 'S' then SPhoneNo else PPhoneNo end)= 11 and ClassId = 1 
           and GRNo not in(select GRNo from Discharge)
end
GO

很抱歉能够奖励您在接受答案时获得的唯一声誉

于 2012-04-23T15:55:23.197 回答
0

您可以编写此存储过程以使用动态 SQL。

创建过程 [dbo].[SMSStudentSelect2] @Sorp char(20) 作为开始

声明 @SQL AS nvarchar(max) =

'选择' + @Sorp + ' AS PhoneNo from Students where ' + LENGTH(@Sorp) + ' = 11 and ClassId = 1 and GRNo not in (select GRNo from Discharge)'

执行(@sql)

结尾

这不是最快的代码,但它会返回您期望的结果。

于 2012-04-23T20:07:56.067 回答