|
CREATE PROC Proc_Test1
(
@姓名 varchar(10),
@课程 varchar(10),
@分数 int,
@总数 int output
)
AS
BEGIN
declare @sqls1 nvarchar(max)
declare @sqls2 nvarchar(max)
declare @sqls3 nvarchar(max)
set @sqls1='
FROM test
WHERE ID>1'/*如果没有一定成立的条件就需要加1=1*/
IF @姓名''/*参数过滤*/
BEGIN
SET @sqls1=@sqls1+' AND 姓名='''+@姓名+''''/*AND前面要加空格*/
END
IF @课程''
BEGIN
SET @sqls1=@sqls1+' AND 课程='''+@课程+''''/*为了@课程加上引号,特别处理。三个引号:其中一个为引号,用于字符串表示,另外两个为引号的转义字符。*/
END
IF @分数>0
BEGIN
SET @sqls1=@sqls1+' AND 分数>='+cast(@分数 as nvarchar)/*非字符串参数要转换为字符串*/
END
--取总数
SET @sqls2='
SELECT @总数=COUNT(1)'+@sqls1
--取数据
SET @sqls3='
SELECT * '+@sqls1
exec sp_executesql @sqls2,N'@总数 int out',@总数 out/*语句前的N必不可少*/
exec (@sqls3)
END
|
|
|