Почему хранимая процедура не возвращает ничего, даже если параметры верны? - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь передать выбранные значения в SP , чтобы вернуть совпадающие результаты, но это ничего не возвращает, но дело в том, что когда я даю значения вручную в запросе, это работает s.Am с использованием функции IN в sql.

Вот мой код Ajax

    <script>
        $('.checked').click(function () {

            var colorss =$("#colors input:checked").map(function (i, el) { return el.name; }).get();
            var combinedstring = colorss.join("','");
            var result = "'" +combinedstring+"'";

            alert(test);
            if (this.checked) {

                $.ajax({
                    type: "POST",
                    url: 'FilterByColor',
                    data: { minimum_range: $("#minid").val(), maximum_range: $("#maxid").val(),color:result}, //--> send id of checked checkbox on other page
                    success: function (vlist) {

                        $('#card-group').empty();
                        for (var i in vlist) {

                            $('#card-group').append($('<div class="col-lg-3 col-sm-6 p-0"><div class="card product-men p-3"><div class="men-thumb-item"><img src="' + vlist[i].img1 + '" id="imgfront" class="card-img-top"><div class="men-cart-pro"><div class="inner-men-cart-pro"><a href="#" id="quickview" class="link-product-add-cart">Quick View</a>/</div></div></div><!-- card body --><div class="card-body  py-3 px-2"><h5 class="card-title text-capitalize" id="mname">' + vlist[i].mname + '</h5><div class="card-text d-flex justify-content-between"><p class="text-dark font-weight-bold" id="mprize">' + vlist[i].mprize + '</p><p class="line-through" id="mdprize">' + vlist[i].mdprize + '</p></div></div><!-- card footer --><div class="card-footer d-flex justify-content-end"><h3> <a href="Purchase/AddToCarts?mid=' + vlist[i].mid + ',mrate=' + vlist[i].mrate + '" class="hub-cart phub-cart btn">Add To Cart</a></h3></div></div></div>'));
                        }
                    },
                    error: function () {
                        alert('it broke');
                    },
                    complete: function () {
                        alert('it completed');
                    }
                });

            }
        });
</script>

Вот мойSP

ALTER PROCEDURE [dbo].[getWproductByColor]
@sprize int,
@eprize int,
@color char(50)
as

BEGIN
select mid,LTRIM(RTRIM(mtype))as mtype,LTRIM(RTRIM(mname))as mname,LTRIM(RTRIM(mdetails))as mdetails,LTRIM(RTRIM(mcode))as mcode,LTRIM(RTRIM(mcolor))as mcolor,msize,LTRIM(RTRIM(mctype)) as mctype,convert(date,mdate)as mdate,mdprize,mprize,mcount,mimg1,mimg2,mimg3  from [dbo].[material] where mtype='women' and (mdprize between @sprize AND @eprize)and (mcolor IN (@color)) order by mdprize asc;
END

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Пожалуйста, создайте ниже функцию на сервере Sql

CREATE FUNCTION [dbo].[SplitColor] (@InStr VARCHAR(MAX))
RETURNS @TempTab TABLE
   (ColorCode Varchar(50) not null)
AS
BEGIN
    ;-- Ensure input ends with comma
    SET @InStr = REPLACE(@InStr + ',', ',,', ',')
    DECLARE @SP INT
DECLARE @VALUE VARCHAR(1000)
WHILE PATINDEX('%,%', @INSTR ) <> 0 
BEGIN
   SELECT  @SP = PATINDEX('%,%',@INSTR)
   SELECT  @VALUE = LEFT(@INSTR , @SP - 1)
   SELECT  @INSTR = STUFF(@INSTR, 1, @SP, '')
   INSERT INTO @TempTab(ColorCode) VALUES (@VALUE)
END
    RETURN
END

Пожалуйста, убедитесь, что передаваемая строка заканчивается одной запятой

Ваша хранимая процедура нуждается в некоторой модификации

 ALTER PROCEDURE [dbo].[getWproductByColor]
    @sprize int,
    @eprize int,
    @color char(50)
    as

    BEGIN
    select mid,LTRIM(RTRIM(mtype))as mtype,LTRIM(RTRIM(mname))as 
    mname,LTRIM(RTRIM(mdetails))as mdetails,LTRIM(RTRIM(mcode))as 
    mcode,LTRIM(RTRIM(mcolor))as mcolor,msize,LTRIM(RTRIM(mctype)) as 
    mctype,convert(date,mdate)as mdate,mdprize,mprize,mcount,mimg1,mimg2,mimg3  
    from [dbo].[material]
    where mtype='women' and
   (mdprize between @sprize AND @eprize) and
   (mcolor IN (SELECT * FROM SplitColor(@color))) 
   order by mdprize asc;
    END
0 голосов
/ 24 сентября 2019

ОТЛАДКА ХОРОШО!

Сначала установите точку останова на функции вашего контроллера, где данные поступают из поста AJAX.Затем проверьте, правильно ли проходят значения.Если это так, как вам нужно, то проверьте функцию вызова sp на предмет возможных ошибок (например, тип данных sp и тип отправляемых данных).Если это также правильно, то

Открыть SSMS(Sql Server Management Studio), затем из Tools открыть SQL Server Profiler, чтобы выяснить, какой запрос точно выполняется в вашем процессе.

Я уверен, что выузнаю сам

...