sql server 2005 存储过程分页


/*
名称:PagingRecord
作用:按任意字段进行排序分页
*/

CREATE   PROCEDURE [dbo].[PagingRecord]
(
@PageIndex int,–页号,从0开始
@PageSize int,–页尺寸
@OrderField varchar(100),–排序字段及类型(多个条件用逗号分开)如:JobID DESC,Checkintime
@TableName varchar(100),–表名或视图表
@StrWhere varchar(2000),–条件
@FieldList varchar(2000),–欲选择字段列表
@DoCount AS bit=1– 0值返回记录总数, 非 0 值则返回记录
)
AS

BEGIN TRAN

DECLARE @SqlQuery varchar(4000)

IF @DoCount<>0
Goto GetCount
Else
Goto GetSearch

GetCount:–返回记录总数
DECLARE @SearchSql AS Nvarchar(4000)
SET @SearchSql= ‘SELECT Count(*) AS Total FROM ‘+@TableName+’ WHERE ‘+@StrWhere
exec sp_executesql @SearchSql
–print @SearchSql
COMMIT TRAN
return

GetSearch:

SET @SqlQuery=’SELECT ‘+@FieldList+’
FROM (SELECT row_number() over(ORDER BY ‘+@OrderField+’) as rownum,
‘+@FieldList+’
FROM ‘+@TableName+’ WHERE ‘+@StrWhere +’) as temp
WHERE rownum BETWEEN (‘+cast(@PageIndex as varchar)+’-1)*’+cast(@PageSize as varchar)+’+1 and ‘+cast(@PageIndex

as varchar)+’*'+cast(@PageSize as varchar) + ‘ ORDER BY ‘+@OrderField
–print @SqlQuery
SET NOCOUNT ON
execute(@SqlQuery)
SET NOCOUNT OFF
COMMIT TRAN

清除MSSQL事务日志文件的几种方法

1.清空日志

1):打开查询分析器,输入命令
DUMP TRANSACTION 数据库名 WITH NO_LOG
2):再打开企业管理器–右键你要压缩的数据库–所有任务–收缩数据库–收缩文件–选择日志文件–在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

2.删除LOG

1):分离数据库企业管理器->服务器->数据库->右键->分离数据库
2):删除LOG文件
3):附加数据库企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500多K

3、如果想以后不让它增长

企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M

再将此数据库设置自动收缩

php读取 mssql数据datatime时间字段的问题

mssql默认以系统时间格式输出,你可以调整系统的时间格式来解决

当然是在程序里解决比较灵活,例如:

“select  convert(char,日期字段,120)   as   date2   from   table”

convert(char,date,N)输出的各中样式
N 日期样式
0 04 2 2005 9:06AM
1 04/02/05
2 05.04.02
3 02/04/05
4 02.04.05

Continue reading

access数据库导入mssql应该注意的几个地方[转]

1、在ACCESS中经常使用的自动编号字段,导入到MSSQL后,他并不是自增型的INT,需要手工设置,把导入后的自动编号字段的标识的“否”改为“是”,“种子”和“递增量”都为“1”,才能成为自动编号;

2、在MSSQL SERVER中,有许多保留字,在ACCESS中是没有的,当你把数据导入到MSSQL的时候,问题就出来了。MSSQL在导入的时候,会自动给这些字段(包括数据库中的表名)加上“[字段名]”,因此,你必须修改你的脚本,把相应的字段名字(或者表名字)加上中括号,或改变字段名字为不是MSSQL的保留字。
例如user应该写为[user]
(具体是那些,请参考有关资料)

3、在用ACCESS关于时间的使用,大家喜欢使用“SELECT * FROM AAAA WHILE TIME="&NOW()”这样的SQL语句,然而,在MSSQL中没有“NOW()”这个函数,而是使用“GETDATE()”,所以,所有的SQL语句中的“NOW()”必须换成“GETDATE()”,请吧sql语句和默认值改为getdate()。

4、在ACCESS中SQL如果用到mid(str,bengin,strlen),在MSSQL中没有这个函数,可以用这个代替left(right(str,len(str)-1),strlen),例如
Mid(”202.097.181.059”,5,3)
改为:left(right(”202.97.181.059”,len(”202.097.181.059”)-),3)

5、在ACCESS的SQL语句中的时间使用变量查询的时候,大家一般使用“SELECT * FROM AAAA WHILE TIME=#"&变量名&"#"”,在MSSQL中是不行的,他的语法是“SELECT * FROM AAAA WHILE TIME=”"&变量名&"”"”。(意思是让你把日期时间变量当成字符串来使用,呵呵~~~)

6、在需要用到时间计算的时候,通常大家使用“SELECT * FROM AAAA WHERE DATEDIFF(”dd”,#"&NOW()&"#,被比较的字段名)>0”这样的语法,在使用到MSSQL的时候是绝对通不过的,即使把#"&NOW()&"# 换成了”"&GETDATE()&"”也没有用,因为MSSQL中的DATEDIFF()函数不认识“”计算类型””里的单引号,你必须使用双引号,并且使用两个(ASP的语法规则)。因此这样的语句应该换成“SELECT * FROM AAAA WHERE DATEDIFF(""dd"",”"&GETDATE()&"”,被比较的字段名)>0”。

7、在ACCESS数据表中的“是/否”类型字段,导入到MSSQL后,是BIT字段,他的值不再是“TRUE”或“FALSE”,而是“1”和“0”,并且“1”和“0”在ASP中并不绝对等同于“TRUE”或“FALSE”,因此在引用这些数据的时候,要加以注意。

8、ACCESS中备注型在MSSQL中改为TEXT或者NTEXT性,长度默认为16就可以,不影响贴子长度!
9、ACCESS中SQL语句 delete * from 表名…. 再MS SQL中改为delete from….

10、ACCESS 中的好多默认值在MSSQL中需要手工添加,特别是int型,请对照改动!