Sql存储过程 如何动态修改sql语句!

ALTER PROCEDURE [dbo].[ProductPageNew_CN]
-- 传入最大显示纪录数和当前页码
@MaxPageSize int,
@PageNum int,
@type int,
@ProAtt1 int,
@ProAtt2 int,
@ProAtt3 int,
@ProAtt4 int,
@ProPrice int,
@Count int output
AS
BEGIN
SET NOCOUNT ON;

DECLARE
@Name nvarchar(50),
@Cursor int,
@SqlWhere nvarchar(500),
@SQLString nvarchar(500)

-- 设置动态Where
if(@ProAtt1>0)
set @SqlWhere = @SqlWhere+' and ProAtt1='+@ProAtt1
if(@ProAtt2>0)
set @SqlWhere = @SqlWhere+' and ProAtt2='+@ProAtt2
if(@ProAtt3>0)
set @SqlWhere = @SqlWhere+' and ProAtt3='+@ProAtt3
if(@ProAtt4>0)
set @SqlWhere = @SqlWhere+' and ProAtt4='+@ProAtt4
if(@ProPrice>0)
set @SqlWhere = @SqlWhere+' and ProPrice='+@ProPrice

-- 首先得到纪录总数
Select @Count = count(ID)
FROM NetDIY_Products_CN Where 1=1;

-- 定义游标需要开始的位置
Set @Cursor = @MaxPageSize*(@PageNum-1)+1
-- 如果游标大于纪录总数将游标放到最后一页开始的位置
IF @Cursor > @Count
BEGIN
-- 如果最后一页与最大每次纪录数相等,返回最后整页
IF @Count % @MaxPageSize = 0
Set @Cursor = @Count - @MaxPageSize + 1
-- 否则返回最后一页剩下的纪录
ELSE
Set @Cursor = @Count - (@Count % @MaxPageSize) + 1
END
-- 将指针指到该页开始

Set Rowcount @Cursor
-- 得到纪录开始的位置
Select @Name = weighting
FROM NetDIY_Products_CN Where 1=1
orDER BY weighting desc;

-- 设置开始位置
Set Rowcount @MaxPageSize
-- 得到该页纪录
SELECT *
FROM NetDIY_Products_CN
Where weighting <= @Name
order By weighting desc
Set Rowcount 0
END

如何在sql后面加入变量@SqlWhere?
最新回答
依旧殇心

2026-10-22 00:10:29

利用动态sql:
将整个sql语句编辑成一个字符串,最终通过execute语句来执行动态sql