2007/05/11 12:54
参照用Win2003 server打造安全的个人Web服务器对服务器进一步做了一些配置。出于对SQL安全性的考虑,我参照
4、删除以下的扩展存储过程格式为:
use master
sp_dropextendedproc '扩展存储过程名'
xp_cmdshell:是进入操作系统的最佳捷径,删除
访问注册表的存储过程,删除
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
Xp_regread Xp_regwrite Xp_regremovemultistring
删除了这些存储过程,但今天发现在MSSQL中使用新建作业时提示找不到xp_regread,于是就想办法恢复这些SP。找了另一台2003的机子对比,通过sp_addextendedproc exec 'xp_regread','xp_star.dll',恢复了'xp_regread'。
但是这回提示变成,
Cannot load the DLL xp_star.dll, or one of the DLLs it references.
Reason: 126(The specified module could not be found.).
(注:我的其实是中文的,但错误提示没Copy下来,在搜索时找到了他人英文版出的一模一样的提示)
晕,再把其它过程也都恢复,
sp_addextendedproc xp_regaddmultistring,'xp_star.dll'
sp_addextendedproc xp_regdeletekey,'xp_star.dll'
sp_addextendedproc xp_regdeletevalue,'xp_star.dll'
sp_addextendedproc xp_regenumvalues,'xp_star.dll'
sp_addextendedproc 'xp_cmdshell','xplog70.dll'
还是一样的提示,不知道哪里出了问题:(
MSSQL重打一次SP4,打一下后,还是不行。
最后在安装目录的Install目录下,看到了最后一个文件xpstar.sql,有希望,查询分析器运行了它一下,哈,搞定:)
引用
4、删除以下的扩展存储过程格式为:
use master
sp_dropextendedproc '扩展存储过程名'
xp_cmdshell:是进入操作系统的最佳捷径,删除
访问注册表的存储过程,删除
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
Xp_regread Xp_regwrite Xp_regremovemultistring
删除了这些存储过程,但今天发现在MSSQL中使用新建作业时提示找不到xp_regread,于是就想办法恢复这些SP。找了另一台2003的机子对比,通过sp_addextendedproc exec 'xp_regread','xp_star.dll',恢复了'xp_regread'。
但是这回提示变成,
Cannot load the DLL xp_star.dll, or one of the DLLs it references.
Reason: 126(The specified module could not be found.).
(注:我的其实是中文的,但错误提示没Copy下来,在搜索时找到了他人英文版出的一模一样的提示)
晕,再把其它过程也都恢复,
sp_addextendedproc xp_regaddmultistring,'xp_star.dll'
sp_addextendedproc xp_regdeletekey,'xp_star.dll'
sp_addextendedproc xp_regdeletevalue,'xp_star.dll'
sp_addextendedproc xp_regenumvalues,'xp_star.dll'
sp_addextendedproc 'xp_cmdshell','xplog70.dll'
还是一样的提示,不知道哪里出了问题:(
MSSQL重打一次SP4,打一下后,还是不行。
最后在安装目录的Install目录下,看到了最后一个文件xpstar.sql,有希望,查询分析器运行了它一下,哈,搞定:)
2007/05/05 22:11
用过Mysql的朋友知道,删除限制行数相当简单,方法是Delete from Hx_Table Limit
10,限制10行。而MSSQL中没有Limit,因此长久以来一直以为没这功能。。。
今天在用T-SQL编写一些简单的小程序,用到了SET ROWCOUNT,确实可以用SET ROWCOUNT 数量来限制删除(Delete)或更新(Update)的行数,查看一下其文档。
建议将当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句重新编写为使用 TOP 语法。有关更多信息,请参见 DELETE、INSERT 或 UPDATE。
打开Delete,页面查找top,原来需要这样使用:
E. 在 DELETE 和 SELECT 中使用 TOP 子句
由于可以在 DELETE 语句中指定 SELECT 语句,因此还可以在 SELECT 语句中使用 TOP 子句。例如,下例从 authors 表中删除前 10 个作者。
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
Update限制行数也是同理。
10,限制10行。而MSSQL中没有Limit,因此长久以来一直以为没这功能。。。
今天在用T-SQL编写一些简单的小程序,用到了SET ROWCOUNT,确实可以用SET ROWCOUNT 数量来限制删除(Delete)或更新(Update)的行数,查看一下其文档。
引用
建议将当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句重新编写为使用 TOP 语法。有关更多信息,请参见 DELETE、INSERT 或 UPDATE。
打开Delete,页面查找top,原来需要这样使用:
引用
E. 在 DELETE 和 SELECT 中使用 TOP 子句
由于可以在 DELETE 语句中指定 SELECT 语句,因此还可以在 SELECT 语句中使用 TOP 子句。例如,下例从 authors 表中删除前 10 个作者。
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
Update限制行数也是同理。
2007/05/02 20:27
前几天拿到一套小程序,里面有个IP库,打开一看,居然还有负数。奇怪的查看了一下它的代码,原来是IPA段大于127的,就减去4294967296,所有就有负数了。看了下字段属性,是长整型的。如果按照原来的做法,access要双精度(double)型,mssql要bigint才放的下。因为int字段的范围是-2,147,483,648 至 2,147,483,647。
2007/04/14 11:25
win2000下不大方便,需要将站点的应用程序保护设置为 高,默认是中。
然后打开管理工具 -> 组件管理,组件服务 -- 计算机 -- 我的电脑 -- com+ 应用程序
选择查看 -> 状态查看,就可以看到类似如下的显示:
名称 运行 PID
IIS-{www.itlearner.com//Root} 是 2544
由于应用程序保护为高时,较消耗资源,推荐只在需要查看的时候设置,查看完毕后要记得还原。
在Win2003下,提供了一个命令,可以方便的查看。
cmd -> iisapp -a 显示
W3WP.exe PID: 1264 AppPoolID: hx
W3WP.exe PID: 3116 AppPoolID: hx_2
W3WP.exe PID: 3952 AppPoolID: DefaultAppPool
有了站点的PID值,就可以在任务管理器的进程中查看对应的PID值占用的内存和CPU了。不过,默认好像不显示PID值,需要在查看->选择列中选择“PID”后,就可以看到了。
然后打开管理工具 -> 组件管理,组件服务 -- 计算机 -- 我的电脑 -- com+ 应用程序
选择查看 -> 状态查看,就可以看到类似如下的显示:
名称 运行 PID
IIS-{www.itlearner.com//Root} 是 2544
由于应用程序保护为高时,较消耗资源,推荐只在需要查看的时候设置,查看完毕后要记得还原。
在Win2003下,提供了一个命令,可以方便的查看。
cmd -> iisapp -a 显示
W3WP.exe PID: 1264 AppPoolID: hx
W3WP.exe PID: 3116 AppPoolID: hx_2
W3WP.exe PID: 3952 AppPoolID: DefaultAppPool
有了站点的PID值,就可以在任务管理器的进程中查看对应的PID值占用的内存和CPU了。不过,默认好像不显示PID值,需要在查看->选择列中选择“PID”后,就可以看到了。
2007/04/05 20:32
今天发现如下错误:
Microsoft OLE DB Provider for SQL Server 错误 '80040e21'
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
是在从Access数据库中取出数据存入到MSSQL时发生的。
检查了行数,发现是rs("test") = test。那就检查test字段,发现access是备注,想起MSSQL上为了省点空间,没用ntext,而是使用了nvarchar(2000)。问题发现了,又不想把字段类型改为ntext,就只能用下面的办法解决了。
if len(test)>2000 then test = left(test,2000)
rs("test") = test
这样,就没有错误发生了:)
Microsoft OLE DB Provider for SQL Server 错误 '80040e21'
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
是在从Access数据库中取出数据存入到MSSQL时发生的。
检查了行数,发现是rs("test") = test。那就检查test字段,发现access是备注,想起MSSQL上为了省点空间,没用ntext,而是使用了nvarchar(2000)。问题发现了,又不想把字段类型改为ntext,就只能用下面的办法解决了。
if len(test)>2000 then test = left(test,2000)
rs("test") = test
这样,就没有错误发生了:)








