0
我從一個asp.net webform將參數傳遞給存儲過程。MS SQL存儲過程返回基於空白參數的意外結果
但是,對於一個特定的參數組合,單個參數似乎被忽略。
我傳遞的參數是導致該問題如下:
EXEC @return_value = [dbo].[spProgressCohorts]
@StuYear = N'10',
@DataCollection = N'March 2013 Teacher Assessments',
@SubjectName = N'English',
@TeachingGroup = N'Select All',
@Subgroup = N'Select All',
@KS2 = '',
@Result = ''
當我運行這些參數的結果返回好像@Result變量被忽略的存儲過程。
結果的存儲過程返回的(在ks2en和結果列都包含供參考):
surname forename ks2en result
El Hajj Zeinab D
Grzelak Marlena F+
Sage Nigel
但是,我得到的只是得到奈傑爾賢者記錄(如預期,這是應該由被退回存儲過程)時,當我運行以下查詢:
select surname, forename, ks2en, result
from student join subject on subject.upn=student.upn
where datacollection='March 2013 Teacher Assessments' and stuyear='10' and name='english' and result='' and ks2en=''
我的存儲過程是巨大的,所以我就包括具體到上面的參數代碼:
ALTER PROCEDURE [dbo].[spProgressCohorts]
@StuYear varchar(2),
@DataCollection varchar(100),
@SubjectName varchar(100),
@TeachingGroup varchar(30),
@Subgroup varchar(10),
@Result varchar(4),
@KS2 varchar(4)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
--interfering with SELECT statements.
SET NOCOUNT ON;
SELECT Forename + ' ' + Surname
FROM student
JOIN subject
ON subject.upn = student.upn
WHERE
(@StuYear = [stuyear]
AND @TeachingGroup = 'Select All'
AND [DataCollection] = @DataCollection
AND [Name] = @SubjectName
AND @Subgroup='Select All'
AND @KS2 = CASE @subjectName WHEN 'English' THEN KS2en WHEN 'Mathematics' THEN KS2ma ELSE KS2av END
AND [Result] like @Result + '%')
OR
(@StuYear = [stuyear]
AND @TeachingGroup Not Like 'Select All'
AND [DataCollection] = @DataCollection
AND [Name] = @SubjectName
AND [TeachingGroup] = @TeachingGroup
AND @Subgroup='Select All'
AND @KS2 = CASE @subjectName WHEN 'English' THEN KS2en WHEN 'Mathematics' THEN KS2ma ELSE KS2av END
AND [Result] like @Result + '%')
ORDER BY surname, forename
它完全按照預期工作。如果您想要完全匹配,請在存儲過程中使用'='。像'%''將匹配所有的'NOT NULL'值。 –
感謝@MartinSmith。問題是我需要它來搜索像結果這樣的值,因爲如果我有一個從webform傳遞的參數,它將是一個完整的等級,例如A,B,C等,結果列中的結果可以具有+或 - 值例如A +,A,A-,B +,B,B-等等。有沒有辦法編輯我的where語句,以便分別處理'@result ='''和'@ ks2 ='''的情況? – Matt