sql,高手帮我解释下存储过程代码!有劳了!

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:28:12
本人系菜鸟,所以提的菜鸟问题,还望不吝赐教
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER proc [dbo].[myProc]
@sqlStr varchar(2000)='', --sql语句
@where varchar(1000)='', --条件
@sort varchar(1000)='',
@nowPage int=1, -- 当前面
@pageCount int=5, --每页记录数
@wareCount int output --总记录数
as
declare @str nvarchar(3000);
declare @str2 nvarchar(4000);

set @str='select @aa=count(*) from ('+@sqlStr+@where+')as mytable'
exec sp_executesql @str, N'@aa int output',@wareCount output --N是什么意思?
set @str2='select * from ('+@sqlStr+@where+') as mytable where row between ('+convert(varchar(5),@nowPage)+'-1)*'
+convert(varchar(5),@pageCount)+'+1 and '
+convert(varchar(5),@pageCount)+'*'+convert(varchar(5),@nowPage)+convert(varchar(1000),@sort);--* 号是什么意思?
print @str2;
exec(@str2);--这句是什么意思?

加上 N 代表存入数据库时以 Unicode 格式存储。
N'string' 表示string是个Unicode字符串

Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。

Unicode 字符串常量支持增强的排序规则。

exec(@str2)表示 执行这个参数所代表的语句

print 是显示这个@str2所代表的值
应该是调试的时候用的 没有实际效果
@aa 是在这里定义的
exec sp_executesql @str, N'@aa int output',@wareCount output
因为 语句是要执行才会验证的 这条语句执行@str 所以@aa是在这里定义了

1、 exec sp_executesql @str, N'@aa int output',@wareCount output --N是什么意思?
2、+convert(varchar(5),@pageCount)+'*'+convert(varchar(5),@nowPage)+convert(varchar(1000),@sort);--* 号是什么意思?
3、exec(@str2);--这句是什么意思?
------------------
答:
1、用sp_ex