SQL условный где пункт выполняется с использованием параметров строки запроса - если функция нужна? - PullRequest
0 голосов
/ 06 сентября 2010

У меня есть следующий sp, который использует условное выражение where - ish!

@MemberId  varchar(7), 
@LocationId varchar(8),
@UUF1 varchar(150),
@UUF2 varchar(50),
@UUF4 varchar(50),
@IDDesc varchar(255),
@OwnBrand nvarchar(50),
@WeightStatus varchar(50),
@MaterialLevel varchar(10),
@BaseMaterialName varchar(15),
@ExtendedMaterialName varchar(50),
@PackagingTypeCode varchar(20),
@Biodegradable nvarchar(50),
@Recyclability varchar(30),
@Feedback varchar(255)

AS

SELECT     MemberId, MemberName, LocationId, IDDesc, UnitId, UnitDescription, UnitUserField1, UnitUserField2, UnitUserField4, IsOwnBrand, OwnBrand, 
                      UnitUserField10, SaleDate, SaleQty, LevelNo, WeightStatus, RevisionSourceCode, RevisionDate, MaterialLevel, BaseMaterialID, BaseMaterialName, 
                      ExtendedMaterialId, ExtendedMaterialName, PackagingTypeCode, UnitWeight, WeightUnitCode, IsBiodegradable, Biodegradable, RecycledContent, 
                      Recyclability, Tonnage, ProductPercentage, Productpriority, Feedback, PriKey
INTO            #tblSPPartI
FROM         tblWeights
WHERE     ((MemberId = @MemberID) OR (@MemberId IS NULL)) 
AND ((LocationId = @LocationID) OR (@LocationID IS NULL))  
AND ((UnitUserField1 = @UUF1) OR (@UUF1 IS NULL)) 
AND ((UnitUserField2 = @UUF2) OR (@UUF2 IS NULL))  
AND ((UnitUserField4 = @UUF4) OR (@UUF4 IS NULL)) 
AND ((IDDesc= @IDDesc) OR (@IDDesc IS NULL))  
AND ((OwnBrand = @OwnBrand) OR (@OwnBrand IS NULL)) 
AND ((WeightStatus = @WeightStatus) OR (@WeightStatus IS NULL)) 
AND ((MaterialLevel = @MaterialLevel) OR (@MaterialLevel IS NULL)) 
AND ((BaseMaterialName = @BaseMaterialName) OR (@BaseMaterialName IS NULL)) 
AND ((ExtendedMaterialName = @ExtendedMaterialName) OR (@ExtendedMaterialName IS NULL)) 
AND ((PackagingTypeCode = @PackagingTypeCode) OR (@PackagingTypeCode IS NULL)) 
AND ((IsBiodegradable = @Biodegradable) OR (@Biodegradable IS NULL)) 
AND ((Recyclability = @Recyclability) OR (@Recyclability IS NULL)) 
AND ((Feedback = @Feedback) OR (@Feedback IS NULL))

Когда я проверяю это в Sql, оно прекрасно работает.

Однако я использую это вконтекст веб-приложения, в котором параметры задаются с помощью строки запроса.

Строка запроса никогда не будет отправлена ​​как пустая в этом контексте - если пользователь не выбрал параметр, строка запроса для параметра будет «Не указано».".

Следовательно, когда параметры строки запроса передаются в вышеуказанный SQL, возвращаемое значение параметра равно" Не указано ", в отличие от того, что мне требуется, т. Е. Нулевое значение.

Как быЯ манипулирую (а) либо приведенным выше кодом, чтобы принять во внимание «Не указано», либо (б) мне нужно изменить разметку html / c # codebehind?

Извинения, если это не имеет смысла.

1 Ответ

0 голосов
/ 06 сентября 2010

Вы можете использовать COALESCE -

COALESCE(@Feedback, 'Not Specified')

Это вернет вам «Не указано», когда @feedback имеет значение NULL.

для вашего примера это будет -

....WHERE     ((MemberId = COALESCE(@MemberID, 'Not Specified'))  
AND ((LocationId = COALESCE(@LocationID, 'Not Specified'))   
AND ((UnitUserField1 = COALESCE(@UUF1, 'Not Specified')) .....
...