重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
set @flag3=@flag3+1;
澧县网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
set @temp1=DATEADD(M,1,@temp1);
set @temp3=@temp1;
在你循环中赋值的语句,你是想每次循环赋不同的时间,但是在你用exec调用时,只能传入最后计算好的唯一的值,这样可能就查询不到数据了吧,不然你拼接成字符串吧
if exists(Select name from sysobjects where name='Sp_Page')
drop proc Sp_Page
go
Create PROCEDURE Sp_Page
(
@TableName varchar(50), --表名
@ReFieldsStr varchar(200) = '*', --字段名(全部字段为*)
@OrderString varchar(200), --排序字段(必须!支持多字段不用加order by)
@WhereString varchar(500) =N'', --条件语句(不用加where)
@PageSize int, --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@TotalRecord int output --返回总记录数
)
AS
BEGIN
--处理开始点和结束点
Declare @StartRecord int;
Declare @EndRecord int;
Declare @TotalCountSql nvarchar(500);
Declare @SqlString nvarchar(2000);
set @StartRecord = (@PageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @PageSize - 1
SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句
SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查询语句
--
IF (@WhereString! = '' or @WhereString!=null)
BEGIN
SET @TotalCountSql=@TotalCountSql + ' where '+ @WhereString;
SET @SqlString =@SqlString+ ' where '+ @WhereString;
END
--第一次执行得到
--IF(@TotalRecord is null)
-- BEGIN
EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数
-- END
----执行主语句
set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord));
Exec(@SqlString)
END
go
调用以上存储过程可以实现分页效果,楼主应该会使用存储过程吧?关键字exec.至于表有没有ID是没问题的,order by随便你选一列就OK.建议楼主用比较新版本的MSSQL 例如2008,7.0这个版本太旧了..
SqlServer还没有这样的功能。
你要是想得到好读的代码的话,在exec之前把生成的sql语句用select输出一下不就行啦。
如果你在其它语言里面连接数据库,如asp或桌面程序,要执行之前把sql语句拼好,就用不到exec了。
--静态SQL
select [商品款号],[品名],[采购价],[零售单价],[颜色],[码系],
case [序号] when 0 then [数量] else null end "0",
case [序号] when 1 then [数量] else null end "1",
case [序号] when 2 then [数量] else null end "2",
case [序号] when 3 then [数量] else null end "3",
case [序号] when 4 then [数量] else null end "4"
from [出入库明细]
--动态SQL
declare @sql varchar(8000)
set @sql = 'select [商品款号],[品名],[采购价],[零售单价],[颜色],[码系]'
select @sql = @sql + ' , case [序号] when ' + seq + ' then [数量] else 0 end "' + seq + '"'
from (select distinct cast([序号] as varchar) seq from [出入库明细]) as a
set @sql = @sql + ' from [出入库明细]'
print @sql
exec(@sql)
因为表名是根据月份来创建的,所以创建视图需要利用参数作为表名进行查询
可以再加一个语句判断表是否存在