Goodspeed

2009年5月20日 #

将指定的表/视图中的数据导出为 html 文件

DECLARE @html varchar(max),@sql nvarchar(max),@tablename varchar(200)
SET @tablename = 'member'
SET @html = '<table><tr>'
SET @sql = 'SET @html = '''';';
SET @sql = @sql + 'SELECT TOP 10 @html = @html + ''<tr>'','

/* 表头 */
SELECT 
    
@html = @html + '<th>'+c.name+'</th>',
    
@sql = @sql + '@html = @html + ''<td>''+ CAST('+c.name+' AS varchar) + ''</td>'''
FROM sys.columns AS c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE EXISTS
(
    
SELECT * FROM sys.tables
    
WHERE name = @tablename
    
AND c.object_id = object_id
)
SET @sql = @sql + '@html = @html + ''</tr>'''
SET @sql = @sql + ' FROM '+@tablename+';'

DECLARE @out varchar(max)
exec sp_executesql @sql,N'@html varchar(max) output',@out output   
SET @html = @html + @out
SET @html = @html + '</tr>'
SET @html = @html + '</table>'

SELECT @html

posted @ 2009-05-20 15:35 Goodspeed 阅读(26) | 评论 (0)编辑

2009年4月6日 #

【jQuery】 菜单滑动特效


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
$(document).ready(
function(){
    (
function(){
        $(
"#play_list").css("opacity","0.3"); //设置透明度
        $("#play_list").children().clone().appendTo("#selector"); //复制元素
        $("#selector").css({
            left:$(
"#play_list").offset().left,
            top:$(
"#play_list").offset().top
        }); 
//定位选择器
        $("#selector").scrollLeft(0); //回到第一帧
    })();

    
var $intervalID = null
    $(
"#play_list a").mouseover(function(){
        clearInterval();
        
var $move = $(this).offset().left - $(this).parent().offset().left; //目标滑动位置
        var $left = $("#play_list").offset().left + $move; //目标左边距位置
        var $m =$("#selector").scrollLeft(); //现滑动位置
        var $l = parseInt($("#selector").css("left")); //现左边距位置
        var $direct = ($l < $left)?1:-1//滑动方向
        var $multiple = ($left - $l ) *$direct / 12//倍数
        $intervalID = window.setInterval(function(){
            $l
+=$multiple*$direct;
            $m
+=$multiple*$direct;
            
if($l *$direct < $left*$direct){
                $(
"#selector").css("left",$l).scrollLeft($m);
            }
else{
                $(
"#selector").css("left",$left).scrollLeft($move);
                clearInterval();
            }
        }, 
1); 
    });

    
//清除前面的动画效果
    function clearInterval(){
        
if($intervalID != null){
            window.clearInterval($intervalID);
            $intervalID 
= null;
        }
    }
})
</script>
<style>
a
{text-decoration: none;}
#selector img,#play_list img
{width:120px; border:1px; }
</style>
</head>
<body>
<div id="selector" style="overflow:hidden; width:120px;white-space:nowrap; position:absolute;Z-index:100"></div>
<br><br><br><br><br><br>
<div id="play_list">
                        
<href="http://koyoz.com/1.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/1.jpg" alt="相恋9年尔冬升再婚娶相恋9年女友" />
                        
</a>
                    
                        
<href="http://koyoz.com/2.jpg">

                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/2.jpg" alt="恋情变贤周海媚公开6年恋情变贤妇" />
                        
</a>
                    
                        
<href="http://koyoz.com/3.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/3.jpg" alt="为啥这么“熊猫”阿宝为啥这么红?" />
                        
</a>
                    
                        
<href="http://koyoz.com/4.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/4.jpg" alt="男友被捕安妮-海瑟薇前男友被捕" />
                        
</a>
                    
                        
<href="http://koyoz.com/5.jpg">

                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/5.jpg" alt="开价一亿天后王菲“复出”开价一亿" />
                        
</a>
                    
                        
<href="http://koyoz.com/6.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/6.jpg" alt="赞郑伊健阿Sa赞郑伊健“保存”得好" />
                        
</a>
                    
                        
<href="http://koyoz.com/7.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/7.jpg" alt="死跑龙套北影演员:甘当‘死跑龙套的’" />
                        
</a>
                    
                        
<href="http://koyoz.com/8.jpg">

                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/8.jpg" alt="潘玮柏死潘玮柏死盯辣妹脱衣解带" />
                        
</a>
                    
                        
<href="http://koyoz.com/9.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/9.jpg" alt="张曼玉分尔冬升深爱张曼玉分手发呆" />
                        
</a>
                    
                
</div>

</body>
</html>

posted @ 2009-04-06 11:51 Goodspeed 阅读(238) | 评论 (1)编辑

2009年4月4日 #

【jQuery】仿IPhone的滑动操作效果

只能用鼠标而不是用手哟。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<style>
img
{border:0px; cursor:pointer;}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(
function(){
    
var $mouseX = 0//鼠标X轴坐标
    var $scrollLeft = 0//滑动位置标记
    var $width = 0;
    
//初始化
    (function init(){
        $(
"#play_list").scrollLeft($scrollLeft); //回到第一帧
        $("#play_list a").click(function(){return false;}) //取消所有click
    })();
    
//开始工作,记录鼠标位置
    $("#play_list img").mousedown(function(e){$mouseX = e.pageX;return false;    });

    $(
"#play_list img").mouseup(function(e){
        
if($mouseX > 0){
            
var $move = $mouseX-e.pageX;//滑动偏移量
            //点击处理
            if($move==0){
                window.location 
= $(this).parent().attr("href");
                
return false;
            }            
            $mouseX 
= 0;$width = 0//还原设置值
            $(this).parent().prevAll().each(function() {$width += $(this).width();    }); //前面元素宽度累加
            $scrollLeft = $width+$(this).width() * (($move > 0)?1:-1); //1为向左滑动 -1这向右滑动
            $("#play_list").animate({ scrollLeft: $scrollLeft },500); //设置滑动位置及动画效果
        }
        
return false;
    });

    
//图片跟随鼠标滑动
    $("#play_list img").mousemove(function(e){
        
if($mouseX > 0){
            
var $move = $scrollLeft + $mouseX-e.pageX; 
            $(
"#play_list").scrollLeft($move);
        }
        
return false;
    });
});
</script>
</head>
<body>
<div id="play_list" style="overflow:hidden; width:341px; height:191px; white-space:nowrap;">
                                                
<href="http://koyoz.com/1.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/1.jpg" alt="相恋9年尔冬升再婚娶相恋9年女友" />
                        
</a>
                    
                        
<href="http://koyoz.com/2.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/2.jpg" alt="恋情变贤周海媚公开6年恋情变贤妇" />
                        
</a>
                    
                        
<href="http://koyoz.com/3.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/3.jpg" alt="为啥这么“熊猫”阿宝为啥这么红?" />
                        
</a>

                    
                        
<href="http://koyoz.com/4.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/4.jpg" alt="男友被捕安妮-海瑟薇前男友被捕" />
                        
</a>
                    
                        
<href="http://koyoz.com/5.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/5.jpg" alt="开价一亿天后王菲“复出”开价一亿" />
                        
</a>
                    
                        
<href="http://koyoz.com/6.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/6.jpg" alt="赞郑伊健阿Sa赞郑伊健“保存”得好" />
                        
</a>

                    
                        
<href="http://koyoz.com/7.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/7.jpg" alt="死跑龙套北影演员:甘当‘死跑龙套的’" />
                        
</a>
                    
                        
<href="http://koyoz.com/8.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/8.jpg" alt="潘玮柏死潘玮柏死盯辣妹脱衣解带" />
                        
</a>
                    
                        
<href="http://koyoz.com/9.jpg">
                            
<img src="http://www.koyoz.com/demo/html/autoplay_xunlei/imgs/9.jpg" alt="张曼玉分尔冬升深爱张曼玉分手发呆" />
                        
</a>
</div>
</body>
</html>

posted @ 2009-04-04 18:13 Goodspeed 阅读(172) | 评论 (2)编辑

2009年2月5日 #

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

64位的操作系统(包括xp,2003,vista,2008等)在使用OLEDB去访问时回收到下面的一个错误

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

问题出在'Microsoft.Jet.OLEDB.4.0' 没有64位的版本。微软好像也不准备出一个64位的版本。

下面是一些目前能采取的解决办法

如果不是WebSite那么你可以采取指定编译的办法
http://cajon.cnblogs.com/archive/2006/05/30/413408.html

如果是WebSite且是IIS6
键入以下命令启用 32 位模式:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

如果是IIS7
appcmd list apppool /xml | appcmd set apppool /in /enable32BitAppOnWin64:true

最后强烈要求微软出‘Microsoft.Jet.OLEDB.4.0' 64位版本!

posted @ 2009-02-05 12:34 Goodspeed 阅读(912) | 评论 (2)编辑

2009年1月28日 #

ASP.NET MVC RC 发布

微软今天布了ASP.NET MVC 1.0 Release Candidate (RC)。同时声称将在下个月发布ASP.NET MVC 1.0。

http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx

在发布RC不久,Phil Haack就发现一个Bug。
http://haacked.com/archive/2009/01/27/controls-collection-cannot-be-modified-issue-with-asp.net-mvc-rc1.aspx

posted @ 2009-01-28 10:19 Goodspeed 阅读(1585) | 评论 (5)编辑

2008年12月1日 #

升级到IIS7的若干问题

刚刚将一台服务器升级到IIS7,经典模式没有任何问题。换成集成模式碰到以下问题

问题一:
状况:程序启动报“Request is not available in this context”错误。
原因:在集成模式下Application_Start时HttpContext并不可用。
解决:在Application_BeginRequest中使用单件模式模拟Application_Start。
具体参阅
http://mvolo.com/blogs/serverside/archive/2007/11/10/Integrated-mode-Request-is-not-available-in-this-context-in-Application_5F00_Start.aspx

问题二:
状况:IIRF会造成连接池自动关闭
原因:不详
解决:使用URL Rewrite Module代替IIRF

问题三
状况:QueryString中如果使用中文,接收回来是乱码
原因:可能是微软的bug
解决:用Server.UrlEncode对参数进行编码。
参阅
http://forums.iis.net/p/1148476/1865705.aspx

posted @ 2008-12-01 15:39 Goodspeed 阅读(162) | 评论 (0)编辑

2008年8月1日 #

Gmail式的上传

原理参见
http://www.cnblogs.com/xbf321/archive/2007/11/09/954317.html

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>File Upload</title>
    
<script type="text/javascript" src="js/jquery-1.2.6.js"></script>
    
<script type="text/javascript">
    $(document).ready(
function(){
        
if(window.top == window)
        {
            
var $div = $(document.createElement("div"));
            $div.html(
"<iframe src='"+document.URL+"' name='uploadiframe' id='uploadiframe'></iframe>");
            $div.css({display:
"none"})
            $(
"body").append($div);
            $(
"form").attr("target","uploadiframe");
            $(
"form").submit();
            
            
            $(
".myupload").empty(); 
            
var $a = $(document.createElement("a"));
            $($a).html(
"upload");
            
            
            $($a).click(
function(){
                $(
"#uploadiframe").contents().find(":file").click();
                $(
"#uploadiframe").contents().find(":submit").click();
                
return false;
            });
            
            $(
".myupload").append($a); 
        }
    });
    
</script>
    
<script type="text/C#" runat="server">
        protected 
void File_Upload(object sender, EventArgs e)
        {
            
if (FileUploadControl.HasFile == true)
            {
                FileUploadControl.SaveAs(@
"D:\upload\" + FileUploadControl.FileName);
            }
        }
    
</script>
</head>
<body>
    
<form id="form1" runat="server">
    
<div class="myupload">
    
<asp:FileUpload ID="FileUploadControl" runat="server" />
    
<asp:Button runat="server" OnClick="File_Upload" Text="Upload It" />
    
</div>
    
</form>
</body>
</html>


 

posted @ 2008-08-01 10:58 Goodspeed 阅读(373) | 评论 (0)编辑

2008年6月12日 #

Google Earth

posted @ 2008-06-12 11:15 Goodspeed 阅读(254) | 评论 (1)编辑

2008年5月23日 #

郑惟骏 全台第一魔方高手

吴宗宪 我猜 节目里玩魔方的视频,鄭惟駿,全台第一魔方高手。

。。。。。。

posted @ 2008-05-23 10:41 Goodspeed 阅读(330) | 评论 (0)编辑

2008年4月18日 #

附加目录中所有的数据库文件

DECLARE @databasedir varchar(200)
SET @databasedir = 'F:\SQLServer\Data\'

/* 目录结构 */
DECLARE @t table(id int identity(1,1),subdirectory nvarchar(255),depth int,i int)

INSERT INTO @t(subdirectory,depth,i)
EXEC master..xp_dirtree @databasedir,0,1

DELETE FROM @t WHERE subdirectory NOT LIKE '%.mdf'
DECLARE @filename nvarchar(255),@dbname nvarchar(255),@filename1 nvarchar(255),@subdirectory nvarchar(255)
DECLARE @cmd nvarchar(4000)
create table #smoPrimaryFileProp(property sql_variant NULL, value sql_variant NULL

WHILE (SELECT COUNT(*FROM @t> 0
BEGIN
    
SELECT TOP 1 @subdirectory = subdirectory FROM @t
    
SELECT @fileName = @databasedir+@subdirectory;
BEGIN TRY
    
SET @cmd = 'dbcc checkprimaryfile (N'''+ @fileName + ''' , 2)'

    
TRUNCATE TABLE #smoPrimaryFileProp
    
insert #smoPrimaryFileProp exec (@cmd)

    
SELECT @dbname = CAST([value] AS nvarchar(255)) 
    
FROM #smoPrimaryFileProp WHERE [property] = 'Database name'
    
    
SELECT @filename1 = REPLACE(@fileName,'.mdf','_log.LDF');

    
    
EXEC sp_attach_db 
    
@dbname,
    
@fileName,@filename1
    
END TRY
BEGIN CATCH
END CATCH


    
DELETE FROM @t WHERE subdirectory = @subdirectory
END

DROP TABLE #smoPrimaryFileProp

posted @ 2008-04-18 17:38 Goodspeed 阅读(165) | 评论 (0)编辑

2008年4月11日 #

拷贝为路径

Windows Vista具有一个上下文菜单选项,叫做“拷贝为路径”,它可以帮助你轻松拷贝文件路径,尽管它是隐藏的。当你选中文件后,你只需要按住“Shift”键同时右键点击,即可拷贝路径。该选项对于多个文件和文件夹也同样适用。当你使用“拷贝为路径”选项对多个项目进行操作时,所有路径都会被解析、引用,并且被以多行的方式记录在剪贴板里。

posted @ 2008-04-11 18:12 Goodspeed 阅读(161) | 评论 (0)编辑

2008年2月22日 #

SQL Server 2008中的GROUPING SETS的应用实例

DECLARE @t TABLE(student nvarchar(50),class nvarchar(50),grade int)

/*insert some datas*/
INSERT INTO @t
SELECT N'孙小美',N'数学',10 UNION ALL
SELECT N'孙小美',N'语文',20 UNION ALL
SELECT N'孙小美',N'英语',30 UNION ALL
SELECT N'阿土伯',N'数学',40 UNION ALL
SELECT N'阿土伯',N'语文',50 UNION ALL
SELECT N'阿土伯',N'英语',60 UNION ALL
SELECT N'小叮铛',N'数学',70 UNION ALL
SELECT N'小叮铛',N'语文',80 UNION ALL
SELECT N'小叮铛',N'英语',90

SELECT * FROM
(
    
SELECT 
        
ISNULL(student,'ALL'AS student, 
        
ISNULL(class,'ALL'AS class, 
        
SUM(grade) AS grade
    
FROM @t
    
GROUP BY GROUPING SETS((student,class),student,class,())
AS t
PIVOT
(
    
MAX(grade) FOR class IN (数学,语文,英语,[ALL])
AS p
ORDER BY student DESC

posted @ 2008-02-22 16:19 Goodspeed 阅读(230) | 评论 (0)编辑

SQL Server 2008中的MERGE命令

SQL Server 2008可以执行TSQL的MERGE命令。用MERGE命令,只需一个语句就可以对行进行 UPDATE、INSERT或 DELETE。

DECLARE @t1 table(t varchar(max))
DECLARE @t2 table(t varchar(max))

INSERT INTO @t1
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c'

INSERT INTO @t2
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd'


MERGE 
@t1 AS t1
USING (
SELECT t FROM @t2AS t2
ON t1.t = t2.t
--WHEN MATCHED THEN 
WHEN NOT MATCHED THEN
INSERT (t) VALUES(t);

SELECT * FROM @t1

posted @ 2008-02-22 15:30 Goodspeed 阅读(223) | 评论 (0)编辑

2007年12月28日 #

获取表的记录行数

SELECT t.name,p.rows FROM sys.indexes AS i
INNER JOIN sys.tables AS t ON i.object_id = t.object_id
join sys.partitions p with(nolock) on i.object_id = p.object_id AND i.index_id = p.index_id
WHERE i.type_desc = 'CLUSTERED'
ORDER BY p.rows

posted @ 2007-12-28 15:26 Goodspeed 阅读(186) | 评论 (0)编辑

2007年12月3日 #

SQL server 2005 更改数据库名称

DECLARE @t table
(
    
    spid 
int
)

INSERT INTO @t
SELECT spid FROM sys.sysprocesses AS p
WHERE EXISTS
(
    
SELECT * FROM sys.databases
    
WHERE name = 'ednchina20071202'
    
AND p.dbid = database_id
)

DECLARE @spid int
DECLARE @sql nvarchar(max)
WHILE((SELECT COUNT(*FROM @t> 0)
BEGIN
    
SELECT TOP 1 @spid=spid FROM @t
    
SET @sql = 'kill ' + CAST(@spid AS varchar(100))

    
EXEC sp_executesql @sql
    
DELETE FROM @t WHERE spid = @spid
END

GO

EXEC sp_dboption 'old','single user','true'
GO
EXEC sp_renamedb 'old','new'
GO
EXEC sp_dboption 'new','single user','false'
GO

posted @ 2007-12-03 17:09 Goodspeed 阅读(298) | 评论 (0)编辑

2007年11月13日 #

如何从SQL Server 中取得字段说明

SQL Server 2000

你可以在企业管理器中增加字段说明,也可以使用下面的代码:

EXEC sp_addextendedproperty 
    
'MS_Description'
    
'some description'
    
'user'
    dbo, 
    
'table'
    table_name, 
    
'column'
    column_name

现在,你就可以得到通过下面的代码得到字段说明:

SELECT 
    
[Table Name] = i_s.TABLE_NAME, 
    
[Column Name] = i_s.COLUMN_NAME, 
    
[Description] = s.value 
FROM 
    INFORMATION_SCHEMA.COLUMNS i_s 
LEFT OUTER JOIN 
    sysproperties s 
ON 
    s.id 
= OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) 
    
AND s.smallid = i_s.ORDINAL_POSITION 
    
AND s.name = 'MS_Description' 
WHERE 
    
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 
    
-- AND i_s.TABLE_NAME = 'table_name' 
ORDER BY 
    i_s.TABLE_NAME, i_s.ORDINAL_POSITION

如果你只关心某一张表,那么上面的TSQL中的注释部份对你就非常有帮助。反过来就会给你所有表中的所有字段。

如果你只需要所有有说明的表,你可以把out join 改成 inner join

SELECT 
    
[Table Name] = i_s.TABLE_NAME, 
    
[Column Name] = i_s.COLUMN_NAME, 
    
[Description] = s.value 
FROM 
    INFORMATION_SCHEMA.COLUMNS i_s 
INNER JOIN 
    sysproperties s 
ON 
    s.id 
= OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) 
    
AND s.smallid = i_s.ORDINAL_POSITION 
    
AND s.name = 'MS_Description' 
WHERE 
    
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 
ORDER BY 
    i_s.TABLE_NAME, i_s.ORDINAL_POSITION

 

SQL Server 2005

在SQL Server 2005 中 sysproperties 表已被废弃,所以上面的代码都不能用。幸运的是他们还是增加了一个系统表给我们 sys.extended_properties,这张表和 sysproperties基本上相似。

SELECT  
    
[Table Name] = OBJECT_NAME(c.object_id), 
    
[Column Name] = c.name, 
    
[Description] = ex.value  
FROM  
    sys.columns c  
LEFT OUTER JOIN  
    sys.extended_properties ex  
ON  
    ex.major_id 
= c.object_id 
    
AND ex.minor_id = c.column_id  
    
AND ex.name = 'MS_Description'  
WHERE  
    
OBJECTPROPERTY(c.object_id'IsMsShipped')=0  
    
-- AND OBJECT_NAME(c.object_id) = 'your_table' 
ORDER  
    
BY OBJECT_NAME(c.object_id), c.column_id


和SQL Server 2000一样,你可以使用注释部份来返回某一张表。

Microsoft Access

在Access中,你可以使用下面的ASP代码来得到某一个字段的说明

<
    
on error resume next 
    
Set Catalog = CreateObject("ADOX.Catalog"
    Catalog.ActiveConnection 
= "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        
"Data Source=<path>\<file>.mdb" 
 
    dsc 
= Catalog.Tables("table_name").Columns("column_name").Properties("Description").Value 
 
    
if err.number <> 0 then 
        Response.Write 
"&lt;" & err.description & "&gt;" 
    
else 
        Response.Write 
"Description = " & dsc 
    
end if 
    
Set Catalog = nothing 
%
>

posted @ 2007-11-13 13:57 Goodspeed 阅读(441) | 评论 (0)编辑

2007年7月20日 #

SELECT * 的真相: 索引覆盖(index coverage)

     摘要: SELECT *的效率很糟糕吗?当然,所有人都知道这一点,但是为什么呢?

是因为返回了太多的数据?

这是一个普遍的回答,但我不这样认为。
  阅读全文

posted @ 2007-07-20 00:25 Goodspeed 阅读(3925) | 评论 (37)编辑

2006年1月12日 #

ASP通过SMTP发邮件

 

<%
    
Const SMTPServerIP = "mail.idg-rbi.com.cn"

    
Dim strFrom, strTo,strSuject, strBody
    strFrom 
= "webmaster@idg-rbi.com.cn"
    strTo 
= "kong123@citiz.net"
    strSubject 
= "test"
    strBody 
= "test"
    
    
Dim sch, cdo, cdoConfig
    sch 
= "http://schemas.microsoft.com/cdo/configuration/"
    
Set cdoConfig = Server.CreateObject("CDO.Configuration"

    cdoConfig.Fields.Item(sch 
& "sendusing"= 2
    cdoConfig.Fields.Item(sch 
& "smtpserver"= SMTPServerIP
    cdoConfig.Fields.Item(sch 
& "smtpauthenticate"= 1
    cdoConfig.Fields.Item(sch 
& "sendusername"= strFrom
    cdoConfig.Fields.Item(sch 
& "sendpassword"= "8888"
    cdoConfig.Fields.Update

    
Set cdo =  Server.CreateObject("CDO.Message")
    
Set cdo.Configuration = cdoConfig
    cdo.From 
= strFrom
    cdo.To 
= strTo
    
    cdo.subject 
= strSubject
    cdo.TextBody 
= strBody
    
    
'session.Timeout=600

    cdo.Send

    
Set cdoConfig = Nothing
    
Set cdo = Nothing
%
>

posted @ 2006-01-12 20:15 Goodspeed 阅读(1672) | 评论 (1)编辑

2006年1月8日 #

反安装SQL server 2005

通过“添加删除程序”里并不能完全删除SQlL server。

通过下面的命令,完全反安装SQL server 2005

d:\Setup.exe /qb REMOVE=ALL INSTANCENAME=<InstanceName>

默认实例的名字是MSSQLSERVER

posted @ 2006-01-08 22:36 Goodspeed 阅读(1536) | 评论 (2)编辑

2005年12月29日 #

在IE中使用最小宽度min-width(CSS版)

min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得,所以如果你用IE将博客园的窗口宽度缩到足够小,所有的字都变在一列中。

常见的解决方法就是用javascript或IE的expressions。

在这里我来尝试用css来解决这个问题

假设我们需要一个min-width为300px的div

第一步

<div style="border-left: 300px solid #fff;height:1px"></div>

将左边框设为300px,并且边框的颜色和页面的背景色一样,高度设为1,否则这个div就看不见了

第二步
在上面的div中,加入下面的代码

<div style="margin-left: -300px;position: relative; height:1px;"></div>

定位方式设为 relative(对象不可层叠),并把对象margin-left(左边的外补丁)设为-300px。
这样这个div就会回到原点,而不是从300px开始,

分析

因为border-left为300px,所以div最小也得有300px,间接实现了min-width的功能。
而由于margin-left为-300px且position:为relative,所以里面的文字不受border-left的影响

完整的代码如下

<div style="border: 1px solid red; width: 90%;">
 
<div style="border-left: 300px solid #fff;height:1px;">
  
<div style="margin-left: -300px;position: relative; height:1px;">
  宽度 90%, 最小宽度 300px;
  最小高度 300%
  
</div>
 
</div>
</div>

posted @ 2005-12-29 16:40 Goodspeed 阅读(2631) | 评论 (0)编辑

2005年12月19日 #

修改SQL server数据库中的逻辑文件名

使用 FILE_NAME 函数可以返回给定文件标识 (ID) 号的逻辑文件名

如下

下例返回 file_ID 为 1 的文件名(master 数据库文件)。

USE master
SELECT FILE_NAME(1)

当我们进行从一个备份中还原数据库时,数据库的逻辑文件名是不会改变的。

可用 ALTER DATABASE 的 MODIFY FILE 子句作为替代方式更改数据文件或日志文件的逻辑名称。

alter database 数据库名
modify 
file (
               name
=逻辑名
               ,newname
=新逻辑名
            )

事实上,上面的语句是更改了sysfiles和sysfiles1系统表中的name字段

posted @ 2005-12-19 11:57 Goodspeed 阅读(1495) | 评论 (0)编辑

2005年11月16日 #

封右键

<script language="JavaScript"> 
<!-- 
  
if (window.Event)  
  document.captureEvents(Event.MOUSEUP);  
  
function nocontextmenu()  

 event.cancelBubble 
= true 
 event.returnValue 
= false
  
 
return false

  
function norightclick(e)  

 
if (window.Event)  
 { 
  
if (e.which == 2 || e.which == 3
   
return false
 } 
 
else 
  
if (event.button == 2 || event.button == 3
  { 
   event.cancelBubble 
= true 
   event.returnValue 
= false
   
return false
  } 
  

  
document.oncontextmenu 
= nocontextmenu;  // for IE5+ 
document.onmousedown = norightclick;  // for all others 
//
--> 
</script>

posted @ 2005-11-16 18:36 Goodspeed 阅读(1331) | 评论 (0)编辑

2005年11月7日 #

SQL server 2005中新增的排序函数及应用

先来个例子

SELECT 
    
YEAR(BirthDate),
    ROW_NUMBER() 
OVER(ORDER BY YEAR(BirthDate)) AS 'RowNumber',/* 按年产生一个唯一的序号 */
    ROW_NUMBER() 
OVER(PARTITION BY YEAR(BirthDate) ORDER BY BirthDate) AS RowNumberPartition, /* 每年产生一个唯一的序列 */
    RANK() 
OVER(ORDER BY YEAR(BirthDate)) AS 'Rank'/* 产生一个非紧密排名 */
    DENSE_RANK() 
OVER(ORDER BY YEAR(BirthDate)) AS 'Dense_Rank'/* 产生一个紧密排名 */
    NTILE(
10OVER(ORDER BY BirthDate DESCAS 'ntile' /* 将结果分成10个组 */
FROM HumanResources.Employee
ORDER BY BirthDate

看看新的排序函数如何解决SQL server 2000中不方便解决的问题
--按BirthDate排序,取第10条到20条的数据 (这一定是最激动人心的新特性,哈哈)
SELECT BirthDate FROM 
(
    
SELECT
        ROW_NUMBER() 
OVER(ORDER BY BirthDate) AS a,BirthDate
    
FROM HumanResources.Employee
AS a
WHERE a BETWEEN 10 AND 20

--将数据分成十份,取第三份
SELECT
    BirthDate
FROM
(
SELECT 
    NTILE(
10OVER(ORDER BY BirthDate DESCAS a,BirthDate
FROM HumanResources.Employee
AS a
WHERE a = 3
再来看看如何用新的排序函数解决以前在SQL server 2000中的问题
-- 出生的员工最多的一年出生多少员工(有点)
/*
 SQL server 2000 */
SELECT MAX(a)
FROM
(
SELECT COUNT(EmployeeID) AS a FROM HumanResources.Employee GROUP BY YEAR(BirthDate)
AS a

/* SQL server 2005  */
SELECT MAX(a)
FROM
(
SELECT 
    ROW_NUMBER() 
OVER(PARTITION BY YEAR(BirthDate) ORDER BY BirthDate) AS a
FROM HumanResources.Employee
AS a

-- 出生日期涵盖了多少年
/*
 SQL server 2000  */
SELECT COUNT(DISTINCT YEAR(BirthDate)) FROM HumanResources.Employee

/* SQL server 2005 */
SELECT MAX(a)
FROM
(
SELECT 
    DENSE_RANK() 
OVER(ORDER BY YEAR(BirthDate)) AS a
FROM HumanResources.Employee
AS a

-- 显示前10%的数据
/*
 SQL server 2000  */
SELECT TOP 10 Percent BirthDate FROM HumanResources.Employee

/* SQL server 2005  */
SELECT
    BirthDate
FROM
(
SELECT 
    NTILE(
10OVER(ORDER BY BirthDate DESCAS a,BirthDate
FROM HumanResources.Employee
AS a
WHERE a = 1



你还能想出什么用处呢?

posted @ 2005-11-07 17:03 Goodspeed 阅读(3302) | 评论 (4)编辑

SQL server 2005 中的分区表(代码示例)

在SQL server 2005中一个新的特性——分区表。

建立分区表的步骤:
1 创建数据库(必须在多个文件组中)
2 创建分区函数
3 创建分区Scheme
4 创建分区表

USE master;
GO
IF OBJECT_ID (N'PartitionDataBase'IS NOT NULL
DROP DATABASE PartitionDataBase;
GO
/* CREATE DATABASE */
CREATE DATABASE PartitionDataBase
ON PRIMARY
(
NAME 
= N'File_A_H',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_AH.mdf'
),
FILEGROUP FileGroup_I_N
(
NAME 
= N'File_I_N',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_IN.mdf'
),
FILEGROUP FileGorup_M_Z
(
NAME 
= N'File_M_Z',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_MZ.mdf'
)
GO
USE PartitionDataBase;
GO
/* 创建分区函数 */
CREATE PARTITION FUNCTION StaffNameRangePFN(varchar(100))
AS
RANGE 
LEFT FOR VALUES ('H','M')
GO
/* 创建分区Scheme */
CREATE PARTITION SCHEME StaffNamePScheme 
AS
PARTITION StaffNameRangePFN
TO ([PRIMARY], FileGroup_I_N, FileGorup_M_Z)
GO
IF OBJECT_ID (N'Staff'IS NOT NULL
DROP TABLE dbo.Staff;
/* 创建分区表 */
CREATE TABLE [dbo].[Staff]  
(
[StaffName] [varchar](100NOT NULL
)
ON StaffNamePScheme ([StaffName])
GO
CREATE CLUSTERED INDEX IX_StaffName ON [Staff]([StaffName])
GO

下面的代码将Staff表按StaffName分布到三个分区中。

插入一些测试数据

INSERT INTO [dbo].[Staff]
SELECT FirstName FROM AdventureWorks.Person.Contact

运行下面的代码,看看数据的分布情况

SELECT 
    $partition.StaffNameRangePFN(StaffName) 
AS [Partition Number],
    
MIN(StaffName) AS [Min StaffName],
    
MAX(StaffName) AS [Max StaffName],
    
COUNT(StaffName) AS [Rows In Partition]
FROM dbo.staff AS o
GROUP BY $partition.StaffNameRangePFN(StaffName)
ORDER BY [Partition Number]

看起来还不错。三个分区都差不多的数据

我们来打破这个平衡

INSERT INTO [dbo].[Staff]
SELECT AddressLine1 FROM AdventureWorks.Person.Address

修改分区表的步骤:
1 添加一个文件组到数据库
2 修改分区Scheme
3 修改分区函数

Use master
GO
ALTER DATABASE PartitionDataBase ADD FILEGROUP FileGroup_0_9
GO
ALTER DATABASE PartitionDataBase
ADD FILE 
(
NAME 
= N'File_0_9',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_09.mdf'
)
TO FILEGROUP FileGroup_0_9
GO
Use PartitionDataBase
GO
ALTER PARTITION SCHEME StaffNamePScheme
NEXT USED FileGroup_0_9;
GO
ALTER PARTITION FUNCTION StaffNameRangePFN()
SPLIT RANGE (
'A');
GO

请注意修改和创建之间的一些差别

再用上面的代码看看数据分布的情况。

posted @ 2005-11-07 15:28 Goodspeed 阅读(2810) | 评论 (4)编辑

2005年10月18日 #

asp.net 2.0 的 Precompile.axd 和 Webadmin.axd

你可能已经注意到在asp.net 2.0 Beta1中的 Precompile.axd 和 Webadmin.axd 在asp.net 2.0 Beta2中已经找不到了.

如果你现在想要编译你的站点,你只能在命令行中使用aspnet_compiler或者是 Visual Studio's菜单中的 Build->Publish command。另一个Webadmin.axd, 我想你应该忘记它。Web的站点管理工具现在只能从Visual Studio中访问。

Precompile.axd 和 Webadmin.axd 对于开发人员来说实在是非常方便的工具,但是对于IT Pro来说可能是一场噩梦。我想ASP.Net team已经认识到了这一点,做出了这个决定。

posted @ 2005-10-18 11:03 Goodspeed 阅读(1931) | 评论 (0)编辑