Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
查询端口当前被哪个进程占用:netstat -ano|findstr 80
IIS 中一定要设置默认页,大多数不能打开网站都与此有关

 
 
原理:IIS,TOMCAT都要用80端口,同一时间只能一个服务器用,采用的方法是将这个80端口分配给IIS,当是tomcat类型的请求信息时,如:*.action. *.jsp就将这些请求转发给TOMCAT服务器,由其负责此类网站的运行。其它的如asp.net网站就默认由IIS来处理。

前提:要在IIS上安装一个筛选器,由这个筛选器来完成信息的分发。如传来www.test.com/index.action网站的信息,先据DNS找到服务器地址,之后通过80端口进入IIS,在IIS上查找主机头为www.test.com/index.action的网站,假如在此网站上配置了筛选器,那么此时筛选器接管传来的请求,读取uriworkermap.properties查找传来的请求是否要传给tomcat, 如在uriworkermap.properties配置了*.action = worker1,那么就在workers.properties查找worker1,若存在此worker实体,就创建, 因worker实体实际上是tomcat的实例,那么完成了index.action由tomcat来执行,完成信息的分发.

步骤:

1, 准备工作

2,创建uriworkermap.properties, workers.properties, isapi.log文件,

3,注册表操作

4,IIS配置筛选器

1, 准备工作

(1) 筛选器下载:  32位机版本为:

http://tomcat.apache.org/dev/dist/tomcat-connectors/jk/binaries/win32/jk-1.2.28/isapi_redirect-1.2.28.dll , 将isapi_redirect-1.2.28.dll 在bin下建一jk文件夹放置(位置无关系)

(2)配置一个测试网站, WINDOWS\system32\drivers\etc 的hosts内增加

127.0.0.1        www.test.com

(3)tomcat: conf\server.xml内Engine中加入:



 注: appBase="G:\Share\lj"为java网站所在的路径, 实际内容要放在lj下的ROOT文件夹下

 测试:运行tomcat, IE输入:www.test.com:8080

2,创建文件:

(1)uriworkermap.properties 内容:

     /*.*=worker1    #所有请求,无论是*.jsp, *.gif类型的全部交由tomcat来处理。

此时对于所有来自www.test.com的请求都转由tomcat来处理!

(2)workers.properties

workers.tomcat_home=C:\Program Files\Apache Software Foundation\Tomcat 6.0

workers.java_home=C:\Program Files\Java\jdk1.6.0_02

ps=\

worker.list=worker1

worker.worker1.port=8009

worker.worker1.host=localhost

worker.worker1.type=ajp13

worker.worker1.lbfactor=1

worker.worker1.connection_pool_size = 500   

    #默认给IIS为250,或出现your connection_pool_size is probably less than the threads in your web server!因2003 server最大连接数为1000

  (通过单击"开始"->控制面板->授权查看),故要相应的设置大一些。 而minsize = (pool_size + 1)/2

worker.worker1.connection_pool_minsize = 250
注: worker1的类型为ajp13,参考tomcat 下server.xml中的  可知worker1将完成与IIS与TOMCAT联系。

(3)isapi.log 为一空文件.

 (4) 文件放置:uriworkermap.propertie, workers.properties,放在Tomcat的conf文件夹下。

isapi.log放置在Tomcat的logs文件夹下。

3,注册表操作

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0]

"log_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\logs\\isapi.log "

"log_level"="debug"

"worker_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\workers.properties"

"worker_mount_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\uriworkermap.properties"

"extension_uri"="/jakarta/isapi_redirect-1.2.28.dll"

注:"log_level"="debug"是测试时使用,可在isapi.log中看到IIS处理信息,在发布时可改为"log_level"="realease"

4,IIS配置筛选器

(1)IIS添加网站:TEST, 目录可以指向一个空目录,主机头为:www.test.com

(2)右键" TEST "-> 新建->虚拟目录 。名字固定jakarta,目录是isapi_redirect-1.2.28.dll.然后在该虚拟目录属性中将其执行权限改为"脚本和可执行程序"。

右键网站TEST ->属性->ISAPI筛选器。名字:jakarta.文件就isapi_redirect-1.2.28.dll.

注:若是win servre2003 需要添加Web服务扩展。在“Internet信息服务管理器”的“网站”中的“Web服务扩展”上点右键选择“添加一个新的Web服务扩展”,
弹出的框中扩展名填jakarta, “要求的文件”选“添加”然后找到你的isapi_redirector.dll后“确定”。 “设置扩展状态为允许”也打上勾,确定。

重启IIS, TOMCAT, 配置成功时TEST ->属性->ISAPI筛选器 中的jakarta 状态:一个向上的箭头,优先级: 高

测试:IE输入:www.test.com


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

win xp 的 iis 5.1 是阳春版的,只能建立一个网站,
必须要 win server 的操作系统,才能建立多个网站。

变通方法:找一个绿色软件:ISS多站点管理 http://files.cnblogs.com/go2fly/iis_site_manage.rar (GMAIL)
不过虽然可以创建多个站点,但是同时只能有一个站点运行,其他站点要设置为“停止”,这是 xp 的 IIS 功能本身限定的。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

指定IP地址 ,TCP端口, 主机头
若未指定IP,则默认为本机
如一网站设置为:
IP : 未分配
TCP端口: 80
主机头:www.test.com

那么访问可为www.test.com:80 因80默认,故相当于www.test.com
若没有指定主机头,则执行为:localhost:80

注:虚拟目录相似


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
行变列

    注:要变列的行单元对应的数据须唯一,故在下面的子查询中先对目标行单元进行了分组,以保证唯一性。
    1,用case指定条件
    SELECT f.UserName,
    SUM(CASE CONVERT(VARCHAR(10),b.OrderDate,120) WHEN '2011-03-10' THEN b.Amount ELSE 0  END) AS '2011-03-10',
    SUM(CASE CONVERT(VARCHAR(10),b.OrderDate,120) WHEN '2011-03-11' THEN b.Amount  ELSE 0 END) AS '2011-03-11',
    SUM(CASE CONVERT(VARCHAR(10),b.OrderDate,120) WHEN '2011-03-12' THEN b.Amount  ELSE 0 END) AS '2011-03-12' 
    FROM bdAchievement a(NOLOCK)
    JOIN bdOrder b(NOLOCK) ON a.OrderNo = b.OrderNo
    JOIN frmuser f ON a.SalesStaff = f.Account
    WHERE a.RootDepartmentID  = 184 AND b.OrderDate >='2011-03-10'
    GROUP BY F.UserName

    2,用SQL SERVER2005提供的关键词PIVOT来执行
    行变列:将多行的值合并放到列上去,这就需要一个聚合函数,此外要指定拆分成行(列一行)的列并且此列按如何规则分配到行上去
    SELECT * FROM (
    SELECT f.UserName,CONVERT(VARCHAR(10),OrderDate,120) orderdate,b.Amount 
    FROM bdAchievement a(NOLOCK)
    JOIN bdOrder b(NOLOCK) ON a.OrderNo = b.OrderNo
    JOIN frmuser f ON a.SalesStaff = f.Account
    WHERE a.RootDepartmentID  = 3 AND b.OrderDate >='2010-02-10') O
    PIVOT (SUM(amount) FOR orderdate IN([2011-03-10],[2011-03-11],[2011-03-12],[2011-03-13])) AS c
    将列订单日期转换到行上去,分成多个列,规则是[2011-03-10],[2011-03-11],[2011-03-12],[2011-03-13]),并对要求的amount求和

    同样列变行为:UNPIVOT
注:应用限制,列拆分规则是有限的几个,即行名是可指定的,若行名是未知数,那查出的数据将不知放到哪一列,故这样的行转列是则不可执行

注: PIVOT 与CASE 方法的区别:PIVOT简洁,但只能将一个列的列值转为列,没有CASE灵活


3,将列直接转成行
现有一客户电话表,客户电话最多4个,要求以行形式显示出来

CREATE TABLE tmpTable(CustomerID INT,Tel VARCHAR(20))

INSERT INTO tmpTable(CustomerID,Tel) VALUES(222,'13587654321')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(222,'13587654322')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(222,'13587654323')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(222,'13587654324')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(333,'13587654331')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(333,'13587654332')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(444,'13587654341')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(444,'13587654332')
INSERT INTO tmpTable(CustomerID,Tel) VALUES(444,'13587654332')

SELECT * FROM (
SELECT customerid,tel, ROW_NUMBER () OVER ( PARTITION BY CustomerID ORDER BY  tel DESC )r
FROM tmpTable tt)m
PIVOT (max(tel) FOR r IN ([1],[2],[3],[4]) ) AS t



Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

VARCHAR(MAX),它的最大长度可以达到2G
注意:VARCHAR和VARCHAR(MAX)混在一起做处理时还是会变成VARCHAR,从而可能被截断,所以需要全转成VARCHAR(MAX)

DECLARE @ControlAccountS VARCHAR(MAX)
SET @ControlAccountS = ”
SET @ControlAccountS = REPLICATE(CONVERT(VARCHAR(MAX),’b’),8500)
PRINT LEN(@ControlAccountS)


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
syscomments :此表存放着存储过程的语句

 /*从链接服务器上拿到存储过程,在目标服务器上执行,可用于发布与更新*/
DECLARE @text VARCHAR(MAX),@objectName VARCHAR(100),@objectID int
DECLARE p CURSOR FOR
SELECT NAME,id FROM dpserver.brm_lvjian_new.dbo.sysobjects o
WHERE xtype IN('P') 
AND o.crdate >= GETDATE()-3
OPEN p
FETCH NEXT FROM p INTO @objectName,@objectID
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @text = ''
    SELECT @text = @text + convert(VARCHAR(MAX),text) FROM dpserver.brm_lvjian_new.dbo.syscomments s 
    WHERE id = @objectID
    IF ( EXISTS( SELECT 1 FROM sysobjects WHERE NAME = @objectName AND xtype IN('P')  ) )
    BEGIN
        --
        EXEC ('DROP PROCEDURE dbo.' +  @objectName)
    END
    EXEC(@text)
    FETCH NEXT FROM p INTO @objectName,@objectID    
END
CLOSE p
DEALLOCATE p


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
DECLARE p CURSOR for
SELECT name FROM sys.tables t
WHERE t.[type] = 'U' AND CHARINDEX('SYS',t.name) =0
ORDER BY t.name
OPEN p
DECLARE @tablename VARCHAR(50)
DECLARE @sql VARCHAR(max)
SET @sql= ''
FETCH NEXT FROM p INTO @tablename 
WHILE @@FETCH_STATUS =0
BEGIN 
    PRINT 'TRUNCATE TABLE ' + @tablename
    FETCH NEXT FROM p INTO @tablename 
END
CLOSE p
DEALLOCATE p


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

Replication方案可以分为Snapshot Replication, Transactional Replication, Peer-2-Peer Replication, Merge Replication。
Snapshot Replication:一般用于对于数据库的一次性的完全复制。
Transactional Replication:用于主数据库向从数据库的单向复制。
具有可更新订阅的事务性发布: 发布服务器与订阅服务器可以独立修改,会定时合并
Merge Replication:可以把多个数据库中的数据进行合并后,复制到目标数据库。

注:发布服务器上需要建立一个windows账号,用来对分布产生的文件进行读取与写入,同时为了利用此账号访问发布数据库,所以需要在SqlServer上创建此账号,具体是选择浏览,选择windows账号。同时为了使sql server服务可以读写分布产生的文件,要将agent服务设置为此系统账号。 而订阅服务器上也要建立一windows账号,是为了增大agent服务的权限,及对订阅数据的写操作。
一、准备工作:
1.在分发与发发数据库上建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。
2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访)。打开1433端口,在防火墙中设特例
3.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy
4.设置SQL 代理(发布服务器和订阅服务器均设置) 打开服务(控制面板—管理工具—服务) —右击SQLSERVER AGENT—属性—登录—选择“此帐户“ —输入或选择第一步中创建的WINDOWS 用户 —“密码“中输入该用户密码
5.设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置)
步骤为:对象资源管理器—-右击SQL实例—–属性—-安全性—-服务器身份验证——选“SQL Server和WINDOWS“,然后点确定
6.开启SQL Server 2005的网络协议TCP/IP和管道命名协议并重启网络服务。
7.在SQL Server中创建步骤1中对应的系统用户登陆名,作为发布数据库的拥有者(设置为dbo_owner和public)。

二、开始:
在分发服务器上建共享文件夹
1,分发服务器上,右击复制,建立分发,注意在指定快照路径时需是网络路径,如:\\192.168.16.204\sqlCopy 204为分发服务器。 若出现运行复制分发时 “由于出现操作系统错误 3,进程无法读…” 则要查看分发服务器属性中的快照与订阅服务器的快照是否指向了网络连接。
2,发布服务器上,右击复制-本地发布,建立发布
2,订阅服务器上,右击复制-本地订阅,建立发布,分发代理安全性中
在以下Windows账号下运行,此账号指订阅服务器的账号,或者选择代理
连接到分发服务器: 选择使用以下SQL Server登陆名 分发服务器所要发布的数据库拥有者的账号

发布服务器配置(在发布服务器上配置发布和订阅)
1. 选择 复制 节点
2. 右键本地发布 —-下一步———系统弹出对话框看提示—-直到“指定快照文件夹“
—-在“快照文件夹“中输入准备工作中创建的目录(指向步骤3所建的共享文件夹)——选择发布数据库——-选择发布类型——-选择订阅服务器类型——-选择要发布的对象——设置快照代理——-填写发布名称。
3. 右键本地订阅——–选择发布服务器——-选择订阅方式(如果是在服务器方订阅的话选择推送订阅反之选择请求订阅)——-填加订阅服务器——–选择代理计划(一般选择连续运行)———其余选择默认项。

注:1)
原先数据库的Release一般会分为三部分:1.表结构的变化(包括加/删表,加/删列);2.配置数据的装载(如添加新功能的配置数据);3.刷函数与存储过程脚本。
对于本项目中的Replication数据库,在Release过程中需注意以下几点:1.若新加的表需要进行Replication,除了在主数据库创建表之外,还需配置此表进行Replicate,并进行初始化。2.若要删除某处于Replication的表,需先取消此表的Replication,再在主、从库中drop此表。3.若需要加/删Replication表的列(此列不能为主键列)时,可以直接在主数据库上执行脚本,变化会自动 Replicate到从数据库。4.配置数据的装载也只需要在主数据库完成。5.函数与存储过程需要在主、从库上都进行刷新。
2)增加列、删除列不能直接在manage studio上面操作,否则出现无法对 表’frmUser’ 执行 删除,因为它正用于复制。 (.Net SqlClient Data Provider,此时要用sql语句。sql server的说明是:对表进行架构更改时必须使用 Transact-SQL ,在 SQL Server Management Studio 中进行架构更改时,Management Studio 将尝试删除并重新创建表。因为无法删除已发布的对象,所以架构更改失败。

3)参考复制分发新增表,删除表操作:http://msdn.microsoft.com/en-us/library/ms152571(v=SQL.90).aspx


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
DECLARE @iniTel VARCHAR(100),@split VARCHAR(20),@next INT,@position INT,@nextPosition int
SET @iniTel = '13737150298/15018747329'
set @iniTel=ltrim(rtrim(@iniTel))
SET @split = '/'
SET @next = 0
SET @position=1
WHILE ( @position < LEN(@iniTel) )
BEGIN
    SET @nextPosition = CHARINDEX(@split,@iniTel,@position)
    IF (@nextPosition = 0 OR @nextPosition IS NULL) SELECT @nextPosition = LEN(@iniTel) +1
    SELECT SUBSTRING(@iniTel, @position, @nextPosition - @position)
    SELECT @position = @nextPosition+1
END


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
引起死锁的进程查看:它没有被阻塞,但别的进程被它阻塞着
   select * from sysprocesses a where  a.blocked=0 
   AND  EXISTS( select * from sysprocesses b where  b.blocked>0  and b.blocked = a.spid   )

*--处理死锁

查看当前进程,或死锁进程,并能自动杀掉死进程

因为是针对死的,所以如果有死锁进程,只能查看死锁进程
当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程

--*/
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
ALTER PROC [dbo].[p_lockinfo]
    @kill_lock_spid BIT = 1 , --是否杀掉死锁的进程,1 杀掉, 0 仅显示
    @show_spid_if_nolock BIT = 1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
AS 
    DECLARE @count INT ,
        @s VARCHAR(MAX) ,
        @i INT
    SELECT  id = IDENTITY( INT,1,1 ),
            标志 ,
            进程ID = spid ,
            线程ID = kpid ,
            块进程ID = blocked ,
            数据库ID = dbid ,
            数据库名 = DB_NAME(dbid) ,
            用户ID = uid ,
            用户名 = loginame ,
            累计CPU时间 = cpu ,
            登陆时间 = login_time ,
            打开事务数 = open_tran ,
            进程状态 = status ,
            工作站名 = hostname ,
            应用程序名 = program_name ,
            工作站进程ID = hostprocess ,
            域名 = nt_domain ,
            网卡地址 = net_address,
sql_handle,
stmt_start,
stmt_end

    INTO    #t
    FROM    ( SELECT    标志 = '死锁的进程' ,
                        spid ,
                        kpid ,
                        a.blocked ,
                        dbid ,
                        uid ,
                        loginame ,
                        cpu ,
                        login_time ,
                        open_tran ,
                        status ,
                        hostname ,
                        program_name ,
                        hostprocess ,
                        nt_domain ,
                        net_address ,
                        s1 = a.spid ,
                        s2 = 0,
sql_handle,
stmt_start,
stmt_end
              FROM      master..sysprocesses a
                        JOIN ( SELECT   blocked
                               FROM     master..sysprocesses
                               GROUP BY blocked
                             ) b ON a.spid = b.blocked
              WHERE     a.blocked = 0
              UNION ALL
              SELECT    '|_牺牲品_>' ,
                        spid ,
                        kpid ,
                        blocked ,
                        dbid ,
                        uid ,
                        loginame ,
                        cpu ,
                        login_time ,
                        open_tran ,
                        status ,
                        hostname ,
                        program_name ,
                        hostprocess ,
                        nt_domain ,
                        net_address ,
                        s1 = blocked ,
                        s2 = 1,
sql_handle,
stmt_start,
stmt_end
              FROM      master..sysprocesses a
              WHERE     blocked <> 0
            ) a
    ORDER BY s1 ,
            s2

    SELECT  @count = @@rowcount ,
            @i = 1

    IF @count = 0
        AND @show_spid_if_nolock = 1 
        BEGIN
            INSERT  #t
                    SELECT  标志 = '正常的进程' ,
                            spid ,
                            kpid ,
                            blocked ,
                            dbid ,
                            DB_NAME(dbid) ,
                            uid ,
                            loginame ,
                            cpu ,
                            login_time ,
                            open_tran ,
                            status ,
                            hostname ,
                            program_name ,
                            hostprocess ,
                            nt_domain ,
                            net_address,
sql_handle,
stmt_start,
stmt_end
                    FROM    master..sysprocesses
            SET @count = @@rowcount
        END

    IF @count > 0 
        BEGIN
            CREATE TABLE #t1
                (
                  id INT IDENTITY(1, 1) ,
                  a NVARCHAR(30) ,
                  b INT ,
                  EventInfo NVARCHAR(255)
                )
            IF @kill_lock_spid = 1 
                BEGIN
                    DECLARE @spid VARCHAR(10) ,
                        @标志 VARCHAR(10)
                    WHILE @i <= @count 
                        BEGIN
                            SELECT  @spid = 进程ID ,
                                    @标志 = 标志
                            FROM    #t
                            WHERE   id = @i
                            INSERT  #t1
                                    EXEC ( 'dbcc inputbuffer(' + @spid + ')'
                                        )
                            IF @标志 = '死锁的进程' 
                                EXEC('kill '+@spid)
                            SET @i = @i + 1
                        END
                END
            ELSE 
                WHILE @i <= @count 
                    BEGIN
                        SELECT  @s = 'dbcc inputbuffer('
                                + CAST(进程ID AS VARCHAR) + ')'
                        FROM    #t
                        WHERE   id = @i
                        INSERT  #t1
                                EXEC ( @s
                                    )
                        SET @i = @i + 1
                    END
            SELECT  标志 ,
数据库名 ,
 进程的SQL语句 = b.EventInfo,
sqlText=substring(qt.text,a.stmt_start/2, 
  (case when a.stmt_end = -1 
 then len(convert(nvarchar(max), qt.text)) * 2 
 else a.stmt_end end -a.stmt_start)/2
) ,
进程状态,
            用户名,
            累计CPU时间,
            登陆时间  ,
            工作站名 ,
            应用程序名,
进程ID ,
            线程ID  
            FROM    #t a
                    JOIN #t1 b ON a.id = b.id
OUTER apply sys.dm_exec_sql_text(a.sql_handle) as qt
        END
GO


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

timestamp:自动生成的唯一二进制数字数据类型,当一行数据改变时,会自动变化,它是唯一的值,每张表中只能有一个列类型为timestamp。timestamp 通常用作给表行加版本戳的机制。 存储大小为 8 个字节。 timestamp 数据类型只是递增的数字,不保留日期或时间。 若要记录日期或时间,请使用 datetime 数据类型。
datetime :是一个时间类型
timestamp使用方法:在一定时间存起时间戳,下次通过与记录时间戳与现在的时间戳进行比对,就知道哪些行进行过改动。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1, DECLARE @time DATETIME
SET @time = GETDATE()
 --------执行sql语句------
select datediff(ms,@time,getdate()) --打印结果

2,
SET STATISTICS TIME ON
    SELECT * FROM bdOrder b(NOLOCK)
    JOIN bmdCustomer c(NOLOCK) ON b.CustomerID = c.ID
    WHERE B.OrderDate >='2011-03-15'
SET STATISTICS TIME OFF
时间分为两个部分,一个是SQL语句的分析与编译时间,一个是实际执行时间elapsed time
CPU时间:指CPU调度时间,占用时间指执行时间
执行上述将返回:
SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(2460 行受影响)

SQL Server 执行时间:
   CPU 时间 = 31 毫秒,占用时间 = 327 毫秒。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, 全文索引:一般索引是按字段将字段整个数据进行排序,而全文索引是对字段数据中某一部分进行索引的建立。
与一般的索引立即更新不同,全文索引一般是定期维护索引的,所以对于频繁更新的数据不合适,需要做全文索引的对象一般都是论文网页之类。

2,使用:使用关键字:CONTAINS、FULLTEXT、CONTAINSTABLE、FREETEXTTABLE。
?? ??? ??? ??? ?例如:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'”search contents*”‘)
?? ??? ??? ????
?? ?FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所?? ??? ??? ??? ??? ??? 以,FREETEXT语句所执行的功能又称做自由式全文查询。
??? 下面语句使用FREETEXT语句搜索Book表中包含“Successful Life”字符串的数据行:
?? ??? select title, notes from book where freetext(*,‘Successful Life’) ?

3, 建立步骤:
??? 1)确认安装了full text search service,并启动了 Microsoft ? Search ? 服务
2)数据库允许全文索引:EXEC sp_fulltext_database ‘enable’ go
或者右键数据库-文件-允许全文索引
??? 3)右击表,建立全文索引,在选择表/视图更改跟踪方式时:若是自动,则在表插入更新时会自动更新索引,手动即手动更新。
??? 4)数据库/存储下可看到全文目录

4,手动执行填充:execute sp_fulltext_catalog ‘FullText’,’start_incremental’ 增量填充
?? ??? ??? ??? ??? ??? ???? execute sp_fulltext_catalog ‘FullText’,’start_full’ 完全填充
??????????????????????????? 完全填充发生在第一次建立时,之后可以通过增量填充来完成,不过数据库表中段有timestamp字段,否则,即使执行了增量填充,实际执行的也是完全填充。

注:全文索引对数据分隔建立索引,故比一般索引以整个数据建立的方式速度要慢上一些,不过比全表扫描要快!
注:若出现timeout的情况,利用sql语句拼接的方式。因为有的数据库不支持动态sql参数
注:建立全文索引的表须有一唯一非空的列,以通过此列值将相关的词关连起来,在查找词时,通过全文检索找到列值,再通过列值返回行(聚集索引)


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

聚集索引:相当于字典中按拼音排序,在按拼音查时,目录中相应位置即是在正文中的位置,比如:正,郑,政在目录中是相连的,而在正文中也是在相近的页面中,按照目录的先后顺序排列着。
非聚集索引:相当于字典中按部首排序,在查询时,如:邓,郑,邱在目录中是在一起的,而在正文中三者是不在一块的,不按先后顺序排列。
即:聚集索引将记录作物理上的排序,非聚集索引做逻辑的排序。因数据在物理上的排序只有一种,故表中聚集索引最多有一个!
按聚集索引查找时,直接查正文,因为正文即是按聚集索引排列的。比如查:郑,这个字直接将字典翻到最后,到大致范围,再进一步翻阅即可。而非聚集索引则需要先查目录,再去找对应位置,速度当然会比聚集索引慢一些。
聚集索引直接查物理位置,而非聚集索引需要找到逻辑位置,再去查物理位置

注:1,SQL中主键就是一种聚集索引,但聚集索引并不一定是主键,因为它限定的列数据中可以包含重复,而主键则不可以。
2,索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。因为用户在表中每加进一个索引,数据库就要做更多的工作,降低写入数据的速度。过多的索引甚至会导致索引碎片。

3,多个字段建立成一个索引时,若分开字段查询,那么用索引的起始列查询与用索引上的全部列查询速度是一样的,但若用索引的非起始列查询,那么索引不起作用。这使得:对于复合索引,起始列须是最经常使用的字段。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,启用数据库邮件服务:打开SQL Server“配置工具”中的“外围应用配置器”,选择“功能的外围应用配置器”。在弹出的对话框中选择数据库邮件,并选择“启用数据库邮件存储过程”。

2,进入SQL SERVER2005 Studio管理界面,就可以看到数据库邮件子项,
    在右键菜单中会有一个"配置数据库邮件"菜单,按照步骤先建立配置文件,然后创建账号,保存退出。在右键菜单的第二项"发送测试邮件",  在弹出的窗口中输入接收的邮件地址,发送就可以。

3,执行msdb.dbo.sp_send_dbmail存储过程发送邮件:
                  EXEC msdb.dbo.sp_send_dbmail
                  @profile_name = 'lvshou.com',
                  @recipients = 'zhengxuesong@lvshou.com',
                  @body_format = 'HTML',
                  @body = 'Test Body lalalala',
                  @subject = 'Test Subject lalalalala'; 
  发附件:
                EXEC msdb.dbo.sp_send_dbmail
                @recipients=N'chapman.tim@gmail.com',
                @body='Message Body', 
                @subject ='Message Subject',
                @profile_name ='Database-mailProfile',
                @file_attachments ='C:FileAttachment.txt'; //附件

注:若发送的对象是如126邮件,可以绑定手机的那种,则间接实现了用Sql Server催发短信的功能!

4,查看发送历史:
    use msdb
    go
    select * from sysmail_allitems
    select * from sysmail_mailitems
    select * from sysmail_event_log


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 DECLARE @show_num  varchar(9);
 Declare @abc nvarchar(200)
set @abc = 'select count(*)  from visitcustomer';
exec ('declare mycur cursor for ' + @abc)

open mycur;
fetch next from mycur into @show_num;
close mycur; 
DEALLOCATE mycur
select @show_num;


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?1.一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) ?

2.本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) ?

3.一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) ?

4.季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) ?

5.当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) ?

6.上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) ?

7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) ?

8.本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) ?

9.本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) ?

10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

备份指定数据并清理
在mysql的安装目录下(D:\service\MySQL\MySQL Server 5.1\bin)运行
mysqldump -u root -pmysql -t lvshou-com? booking -w “is_index = 0 and status = 9 and neworderno is not null”? >> MeetAGeek_Orders12.txt
mysqldump -u root -pmysql-t lvshou-com? booking -w “is_index = 1 and status = 9 and ispayment = 1 and neworderno is not null”? >> MeetAGeek_Orders12.txt
mysql -u root -pmysql lvshou-com -e “;delete? FROM booking where is_index = 0 and status = 9 and neworderno is not null; delete FROM booking where is_index = 1 and status = 9 and ispayment = 1 and neworderno is not null; ”

注:为隐藏需要,可将备份的txt文件改为exe文件


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

declare @bonusnum? decimal(5, 3), 5代表总位数,3代表小数点后位数,故小数点右边的位数为5-3 = 2,最大到99,超出即是溢出错误


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
declare @v varchar(500)
set @v = ''
    SELECT  @v =  OperateCode 
        FROM
        (    
            SELECT 'd' operatecode
            union  all select 'e'
                
        ) T1
select @v
结果为 ‘e’ 即:这种赋值方式会遍历所有记录,将记录一一赋给@v,@v的值为最后一个。可利用这一特性,将一列转换到一格中存储
declare @v varchar(500)
set @v = ''
    SELECT  @v =  @v + OperateCode + ‘,’
        FROM
        (    
            SELECT 'd' operatecode
            union  all select 'e'
                
        ) T1
select @v
结果为:d,e