我在我的一个项目中使用以下程序。
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) = .........
在我的程序中,我得到了令人失望的结果
任何人都可以解决我的问题????
答案 0 :(得分: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”以获得所需的列。
答案 1 :(得分:0)
你错过了这里的=符号:
select @Sorp = PhoneNo
答案 2 :(得分: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
我很遗憾能够奖励你接受答案时获得奖励的唯一声誉
答案 3 :(得分:0)
您可以编写此存储过程以使用动态SQL。
创建程序[dbo]。[SMSStudentSelect2] @Sorp char(20) 如 开始
DECLARE @SQL AS nvarchar(max)=
'select'+ @Sorp +'AS PhoneNo来自学生 其中'+ LENGTH(@Sorp)+'= 11,ClassId = 1 和GRNo不在(从放电中选择GRNo)'
EXEC(@sql)
端
这不是最快的代码,但会返回您期望的结果。