为什么Stored Procedure returns 连参数都不对?
Why isn't Stored Procedure returns Nothing even the parameters are correct?
我正在尝试将复选框选定的值传递给 SP 以 return 匹配的结果,但它不是 return 任何东西,但问题是当我在查询中手动给出值 它工作 s.Am 在 sql 中使用 IN 函数。
Here is my Ajax code
<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>
Here is my 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
DEBUG WELL!
首先在数据来自 ajax post 的控制器函数上放置断点。然后检查值是否正确传递。如果符合您的要求,请检查您的 sp
调用函数以了解进一步的错误可能性(例如 sp 数据类型和您的发送数据类型)。如果这也是正确的,那么
打开 SSMS(Sql Server Management Studio)
,然后从 Tools
打开 SQL Server Profiler
以追踪在您的进程中执行的查询。
相信你会自己发现的
请在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
我正在尝试将复选框选定的值传递给 SP 以 return 匹配的结果,但它不是 return 任何东西,但问题是当我在查询中手动给出值 它工作 s.Am 在 sql 中使用 IN 函数。
Here is my Ajax code
<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>
Here is my 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
DEBUG WELL!
首先在数据来自 ajax post 的控制器函数上放置断点。然后检查值是否正确传递。如果符合您的要求,请检查您的 sp
调用函数以了解进一步的错误可能性(例如 sp 数据类型和您的发送数据类型)。如果这也是正确的,那么
打开 SSMS(Sql Server Management Studio)
,然后从 Tools
打开 SQL Server Profiler
以追踪在您的进程中执行的查询。
相信你会自己发现的
请在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