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 objectpropertyex (OBJECT_ID(‘VR_bswGoods’), ‘IsView’)
IsSystemTable
IsUserTable
IsView
IsTable
IsTableFunction
IsTrigger


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
引用:http://technet.microsoft.com/zh-cn/library/cc966540(en-us).aspx
Sql Server速度变慢问题主要由三个方面引起,可从这三个方面入手分析问题
  1,资源瓶颈:CPU、I/O、内存等。
  2,临时表瓶颈:tempdb各个数据库共用,资源紧张时会引起性能降低。
  3,用户比较耗时的sql查询。

一,CPU瓶颈分析。瓶颈症状:打开perfmon, 监视 processor:% Processor Time若长期>80%,或者任务管理器,说明可能是CPU原因。
1,分析是否是查询语句引起
 这里涉及一个动态视图:sys.dm_exec_query_stats,返回每条查询语句运行的时间
关键栏位有:
 1)sql_handle:表示包含查询的批查询或存储过程的标记,若sql_handle相同,代表查询在同个批处理或同一个存储过程内。可将此值传入    sys.dm_exec_sql_text中获取查询语句。同个存储过程或批处理语句的sql_handle相同,如何分辨是哪个查询语句得到了执行,
可用statement_start_offset、statement_end_offset来查出此查询语句的真容。
2)statement_start_offset:查询在其批查询或持久化对象文本中的开始位置
3)statement_end_offset:查询在其批查询或持久化对象文本中的结束位置
4)execution_count: 计划自上次编译以来所执行的次数。
5)total_worker_time:此计划自编译以来执行所用的 CPU 时间总量(以微秒为单位报告,但仅精确到毫秒)。
6)last_execution_time:上次开始执行计划的时间。
故分析耗CPU语句方法可得出:

--若返回的dbname,objectname为空,代表是动态sql语句,不是存储过程
SELECT 
    dbname,ObjectName,Sql,
    SUM([总消耗CPU 时间(ms)]) [总消耗CPU 时间(ms)],
    SUM([运行次数])[运行次数],[查询语句],[所在存储过程],
    SUM([平均消耗CPU 时间(ms)])[平均消耗CPU 时间(ms)]    
    FROM (
    SELECT TOP (50)
        qs.total_worker_time/qs.execution_count/1000. as [平均消耗CPU 时间(ms)],
        total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
       
        dbo.SQLSig(SUBSTRING(qt.text,qs.statement_start_offset/2+1, --利用sqlsig函数进行参数化,以屏蔽传来的参数,使之标准化
            (case when qs.statement_end_offset = -1
            then DATALENGTH(qt.text)
            else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1),4000)
        as [查询语句], qt.text [所在存储过程],
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
    FROM sys.dm_exec_query_stats qs
    cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
    ORDER BY [平均消耗CPU 时间(ms)] DESC
    )M
    GROUP BY [查询语句],[所在存储过程],dbid, dbname,objectid,ObjectName
    ORDER BY [平均消耗CPU 时间(ms)] DESC

注:测试sys.dm_exec_query_stats 时可先清除缓存DBCC FREEPROCCACHE 再执行查询语句分析。

2,分析是否是重新编译引起,重新编译比较费时。
1)perfmon:

    SQL Server: SQL Statistics: Batch Requests/sec :每秒钟接收的请求数

    SQL Server: SQL Statistics: SQL Compilations/sec:每秒钟的编译数

    SQL Server: SQL Statistics: SQL Recompilations/sec:每秒钟的重新编译数

2)profile:SP:Recompile / SQL:StmtRecompile.
3)sys.dm_exec_query_stats 有一个栏位plan_generation_num,计划编译次数,可用此来分析最常编译的计划。
select top 25
    plan_generation_num,
    SUBSTRING(qt.text,qs.statement_start_offset/2+1,
        (case when qs.statement_end_offset = -1
        then DATALENGTH(qt.text)
        else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)
        as stmt_executing,
    qt.text,
    execution_count,
    sql_handle,
    dbid,
    db_name(dbid) DBName,
    objectid,
    object_name(objectid,dbid) ObjectName
from sys.dm_exec_query_stats as qs
    Cross apply sys.dm_exec_sql_text(sql_handle) qt
where plan_generation_num >1
--AND qs.last_execution_time >='2011-08-28 10:00' 限定时间
order by plan_generation_num desc



二,内存瓶颈分析。瓶颈症状:打开perfmon, 监视 Paging File: %Usage长期>80%。Paging File:Usage: 分页空间使用百分率

三,I/O瓶颈分析:症状:计数器PhysicalDisk:%Disk Time >80% , Avg.Disk Queue Length:>2
1,%Disk Time :所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。
Avg. Disk Queue Length 指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。
不过,若出现上述情况,也可以是内存不足引起。

2,sys.dm_exec_query_stats 有栏位total_logical_writes:此计划自编译后在执行期间所执行的逻辑写入总次数。total_logical_reads:此计划自编译后在执行期间所执行的逻辑写入总次数。
故查询最耗I/O的语句为:

select top 50
(total_logical_reads/execution_count) as [平均逻辑读取次数],
(total_logical_writes/execution_count) as [平均逻辑写入次数],
(total_physical_reads/execution_count) as [平均对象读取次数],
 Execution_count 运行次数,
substring(qt.text,r.statement_start_offset/2+1,
(case when r.statement_end_offset = -1
then datalength(qt.text)
else r.statement_end_offset end - r.statement_start_offset)/2+1) [运行语法]
from sys.dm_exec_query_stats  as r
    cross apply sys.dm_exec_sql_text(r.sql_handle) as qt
--WHERE r.last_execution_time >='2011-08-28 10:00' 限定时间
order by
 (total_logical_reads + total_logical_writes) Desc

四,tempdb瓶颈。空间资源耗尽引起。
查询:
Select
    SUM (user_object_reserved_page_count)*8 as user_objects_kb,
    SUM (internal_object_reserved_page_count)*8 as internal_objects_kb,
    SUM (version_store_reserved_page_count)*8  as version_store_kb,
    SUM (unallocated_extent_page_count)*8 as freespace_kb
From sys.dm_db_file_space_usage
Where database_id = 2
其中:freespace_kb  要足够大才可。



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,Query Notification:当用户访问的数据改变时,会主动通知前台程序,避免了以往的轮询机制。
2,Event Notification:在用户执行DDL或DML语言后,需要立刻处理的商业逻辑可以通过触发器来完成,但由于触发器执行时会与上述语句绑在一个事务中,因此会拖慢系统响应时间,利用Event Notification可以借由队列积累需求,在系统不忙碌时执行这些需求。
3,当CPU,内存,I/O,带宽等使用率持续超过80%时,表示此系统已达临界门槛,此后系统整体性能必定急速下滑。
4,用户端硬件差也有可能拖慢整个系统,原因:当用户要了一大堆数据,但它没有能力立刻处理完这些服务器源源不断传来的网络包,因此Sql Server对该用户的网络输出缓存区也就塞满了数据,此时并不影响其他用户,但当缓存区满时,扫描数据的工作也将暂停,这时扫描数据所持有的锁不能释放,导致其它用户可能被锁定。
5,因为磁盘是通过磁性和机械臂的运行来访问数据,因此效率远低于CPU和RAM等通过电子运行的速度。
6,学习资料:http://technet.microsoft.com/en-us/sqlserver/bb331794.aspx
http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx


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

方案:双网卡+单播+VLAN
多播很多路由设备不运行,会配置不成功!

双网卡的好处:
双网卡单播时,因为主机之间不能互相通信,将设置内网通讯的网卡,也就是群集设置中的心跳。同时,为群集子网上的每个主机使用两个网络适配器有助于让网络通信通过群集主机。传入客户端通信流过集线器,以便将其同时传递给所有主机,而传出通信则直接流到交换机端口,故在某些情况下,第二个网络适配器可以提高总体网络性能。

建议将两台web服务器单独划出到一个Vlan里,这样可以限制NLB单播模式时的广播流量

负载均衡,NLB:Network Load Balancing。

是提供相同服务的一系列服务器同时监听服务请求,并允许在同一时间运行多个应用程序实例。NLB的核心是位于网络适配器驱动和网络层之间的 WLBS.SYS的筛选器驱动。NLB把每个IP数据包分发到所有群集节点,并根据数据包的源地址、目标地址、传输层协议、端口、群集的配置参数以及算法做出由某个节点处理而其他节点丢弃此数据包的统一决定。

单个群集的最大节点数为32,如果还不能满足需要,可以使用Round-Robin Domain Name Service把请求映射到多个群集上(但也因此引入了单点故障DNS,除非DNS冗余)。

windowsserver2003的负载均衡是在端口级进行操作,如端口选择80代表只针对web服务实现负载均衡

命令:nlbmgr nlbmgr /help

参考:http://support.microsoft.com/kb/323437/zh-cn

网络负载平衡常见问题

http://www.microsoft.com/china/technet/prodtechnol/windowsserver2003/technologies/clustering/nlbfaq.mspx

http://blog.csdn.net/coofucoo/article/details/5296632

操作步骤:
准备:两台服务器,双网卡,一网卡对外,另一对内,若在局域网中可通过一网络直线两服务器,形式内部网


在实现网络负载平衡的每一台计算机上,只能安装TCP/IP协议,不要安装任何其他的协议(如IPX协议或者NetBEUI协议),在网络属性中,”网络负载平衡”也不能被选择,这可以从”网络连接属性”中查看。

  ①先进入第一台计算机,以管理员身份登录,从”管理工具”中运行”网络负载平衡管理器”,用鼠标右键单击”网络负载平衡群集”,从出现的菜单中选择”新建群集”,进入”群集参数”界面

  在”IP地址”后面输入规划的群集参数地址202.206.197.195,在子网掩码处使用默认值,在”完整Internet名称”后面输入cluster.heinfo.edu.cn(也可以是其他的名称,但输入的DNS名称必须与输入的IP地址相符)。

  如果允许远程控制,请选中”允许远程控制”,并在”远程密码”和”确认密码”处输入可以进行远程控制的密码

 ②点击”下一步”按钮,进入群集IP地址页面后再进入”端口规则”界面,点击”下一步”按钮,进入”连接”

 ③在”连接”界面的”主机”栏中输入当前计算机的名称w2003-1,然后点击”连接”按钮,将在”对配置一个新的群集可用的接口”框中显示出连接的计算机的网卡及IP地址。选择与群集IP地址同一网段的地址(用于对外提供网络应用的网卡),然后点击”下一步”按钮,进入设置”主机参数”界面,点击”完成”按钮,系统将自动开始网络负载平衡群集的配置。几分钟后,网络负载平衡群集配置完成。

④ 然后,在第一台计算机上,用鼠标右键单击新创建的群集,从出现的菜单中选择”添加主机到群集”。将出现”连接”界面,在”主机”中输入第二台计算机的计算机名称,点击”连接”按钮,将会在”对配置群集可用的接口”下面显示出连接的计算机上的网络配置。选择202.206.197.191的网卡,进入主机参数界面,点击”完成”按钮,即可返回网络负载平衡管理器

 

注:1,加节点两种方式:1,在有群集的机上进行“添加主机到群集”。2,在待入群集的机上,进行链接操作。

  2,在网络负载平衡中的每个节点上,管理员账号的用户名和密码最好一致。

   3,信息保存,使用该工具进行管理是首选的方法。依次单击“开始/所有程序/管理工具/网络负载平衡管理器”,可以打开“网络负载平衡管理器”窗口。遗憾的是,用户所连接到的群集和主机的名称不能在会话之间保留,因此每次启动“网络负载平衡管理器”时,左窗格中的群集列表均为空。不过用户可以将列表保存到一个文本文件中,并在以后启动该工具时加载这个文本文件。在“网络负载平衡管理器”窗口中依次执行“文件/保存主机列表/加载主机列表”命令来实现

注:操作过程中一些参数解释:

虚拟出的群集IP与群集MAC地址对应关系:02-bf-虚拟IP16进制(单播),03-bf-虚拟IP16进制(多播),01 – 00 – 5E -7F -虚拟IP后两位16进制(IGMP多播)

1,群集操作模式:

1)单网卡单播 —两台服务器不能互访,单播模式是指各节点的网络适配器被重新指定了一个虚拟MAC,由于所有绑定群集的网络适配器的MAC都相同,所以在单网卡的情况下,各节点之间是不能通讯的。

2)多播模式下,网络适配器在保留原有的MAC地址不变的同时,还分配了一个各节点共享的多播MAC地址。

所以,即使单网卡的节点之间也可以正常通讯,不过在多播模式中,NLB节点发送的针对群集IP地址MAC地址ARP请求的

ARP回复会将群集IP地址映射到多播MAC地址,而许多路由器或交换机会拒绝这一行为,当出现这种情况时,必须在路由器和交换机上手动

添加静态映射,将群集IP地址映射到群集的多播MAC地址上。

3)IGMP多播(只有在选中多播时,才可以选择此项),

在继承多播的优点之外,NLB每隔60秒发送一次IGMP信息,使多播数据包只能发送到这个正确的交换机端口,避免了交换机数据洪水的产生。不过要求交换机支持IGMP侦听,并且要求群集工作在多播模式下。

如果启用 IGMP 支持,则允许的多址广播 IP 地址将被限制为标准的 D 类范围,即 224.0.0.0 到 239.255.255.255。

2,端口规则筛选模式:多个主机:多主机同时工作,单一主机:一个主机工作,此主机挂掉后,下一个主机才开始工作,可设置优先级。

1):多个主机:

a)无相似性: 平均分配,客户端的服务请求会平均分配到群集内的每一部服务器。假设NLB群集内有2部服务器。当接到客户端的请求时,NLB会将第1个请求交由第1部服务器来处理,第2个请求交由第2部服务器来处理,第3个请求交由第1部服务器来处理,…依此类推。因为所有客户端联机会平均分配到每一部服务器,因此可以达到最佳的负载平衡。如果需要执行交易处理,为了能够共享session状态,则必须将session状态集中储存在state( 用一台机存session即可,web.config改下)或database server中,这种方式适用于大部分的应用程序。

注:为了使网络负载平衡可以正确处理 IP 片段,当为协议设置选择“UDP”或“二者”时应避免使用“无”。

b)单一相似性:相同IP固定同一服务器,客户机的服务请求会固定分配到群集内的某一部服务器。当接到客户机的请求时,NLB会根据客户机 的IP来决定交由哪一部服务器来处理,也就是一部服务器只会处理来自某些IP的请求。因为一个IP的服务请求只会固定由一个服务器来处理,因此没有session状态共享的问题,但可能会导致负载不平衡。这种方式适用于联机需支持 SSL 集多重联机的通讯协议 ( 例如FTP与PPTP等)

网络(类C):相同网段固定同一服务器,根据IP的Class C屏蔽来决定交由哪一部服务器来处理,也就是一部服务器只会处理来自某些网段C的

c)请求。这种方式可确保使用多重 Proxy 的客户端能导向到相同的服务器。

注:在NLB建立完成后,在集雄属性的端口规则中即可设置每台机负载量。

2):.单一主机:若选择此选项,该端口范围内的所有请求都将由一台主机来进行处理,此选项将配合后面的主机优先级来进行主机判定。

注:禁用此端口范围:一般这个选项会在端口例外中进行设置,也就是说,当我们指定了一个比较大的范围端口时,其中有一个或几个端口我们不需要 客户端用户访问到,这时我们将利用这个规则来进行设定,防止用户访问此端口请求。

3,优先级(单一主机标识符),在端口规则选择为单一主机时有效,在一单主机模式下,所有通讯由一台机完成,只有当此机故障时,

才会转由下一个优先级高的接管。它的范围在1-32之间。

注:维护, 使用“nlb display”命令,可以显示网络负载平衡最近产生的事件日志记录


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

尝试在数据库 5 中提取逻辑页 (1:1640) 失败。该逻辑页属于分配单元785421321 ,而非 9854555445。
1,利用DBCC CHECKDB检查一致性

发现
bdOrder的 DBCC 结果。
消息 2575,级别 16,状态 1,第 1 行
索引分配映射(IAM)页 (0:0) (位于对象 ID 1785109450,索引 ID 1,分区 ID 72057594326417408,分配单元 ID 72057594346405888 (类型为 In-row data))的下一个指针指向了 IAM 页 (3:6209),但扫描过程中检测不到它。
消息 7965,级别 16,状态 2,第 1 行

需要修复
保留一个查询页面,执行如下:
use 需要修复的数据库实体的名称
declare @dbname varchar(255)
set @dbname=’需要修复的数据库的名称’
exec sp_dboption @dbname,’single user’,’true’
dbcc checktable(‘需要修复的数据表的名称’,REPAIR_ALLOW_DATA_LOSS)
dbcc checktable(‘需要修复的数据表的名称’,REPAIR_REBUILD)
exec sp_dboption @databasename, N’single’, N’false’?将目标数据库置为多用户状态
然后执行 SQL Server数据修复命令DBCC CHECKDB(’需要修复的数据库实体的名称’) 检查数据库是否仍旧存在错误。注意:修复后可能会造成部分数据的丢失。


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

快递范围自动筛选:根据客户地址筛选合适快递。

建表ExpressScope:
ExpressID,SendArea,NoSendArea

快递筛选:要明确地址信息的方可筛选
对于快递范围表数据填充ExpressScope方式:
1,服务区域明确
SendArea为每个确切地址,NoSendArea为空
2,服务区域不明确,不服务区域明确
SendArea为空,NoSendArea为每个确切的地址或关键字如村
3,服务区域不明确,不服务区域不明确
如服务区域:县城城区地域派送 不服务区域:县城外均不操作
此类不能执行自动筛选,范围不入ExpressScope。

筛选方式:
CHARINDEX(SendArea,@Address) >0
AND CHARINDEX(NoSendArea,@Address) =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

1,性能:二者一样。
2,区别:CAST 是ANSI标准,Convert不是。CAST对于转换指定日期格式上不满足,而Convert可以。
3,实现上,在MsSql中CAST由Convert实现,即通过:
SELECT CAST ( o.[object_id] AS int)
FROM sys.objects o
在Compute Scalar的属性中查看:
[Expr1037] = 标量运算符(CONVERT(int,[master].[sys].[sysschobjs].[id] as [o].[id],0))
参考:
http://beyondrelational.com/blogs/nakul/archive/2011/07/18/cast-v-s-convert-is-there-a-difference-as-far-as-sql-server-is-concerned-which-is-better.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

在利用SELECT REPLACE(‘密水街办?’,’?’,”)发现得到的结果仍为密水街办?,没用将?去掉。
再用SELECT CHECKSUM(‘?’),CHECKSUM(”) 发现得到的结果都是0,说明二者并没有得到区分.
通过改变编码格式解决: SELECT REPLACE(‘密水街办?’ collate Chinese_PRC_BIN2,’?’,”)
查看mssql支持的编码:select * from ::fn_helpcollations()

详细:
mssql默认中文的编码为:Chinese_PRC_CI_AS即:
Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive
unicode字符集Chinese-PRC 大陆简体字,大小写不敏感,重音敏感,假名类型敏感,全角半角不敏感
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分   
_KI(KS) 是否区分假名类型,KI不区分,KS区分 
_WI(WS) 是否区分宽度 WI不区分,WS区分

假名类型:平假名是日语中表音符号的一种
重音:英文单词中的重音,如 ,’a’不等同于’á’。
用得最多的是大小写是否区分,全角是否区分,默认都是不区分

可看到默认全角半角,大小写不区分,若想区分,采用编码转换
IF (‘@’ = ‘@’ collate Chinese_PRC_CI_AS_WS)
PRINT ‘y’
ELSE PRINT ‘n’


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
<script language="javascript"  type="text/javascript">
//防止js文件缓存下来,以后更新时不再需要用户重新删除IE文件等操作。
var now=new Date();
var number = now.getYear().toString()+now.getMonth().toString()+now.getDate().toString()+now.getHours().toString()+now.getMinutes().toString()+now.getSeconds().toString();
document.write("\<script language=\"javascript\" type=\"text/javascript\" src=\"../LodopPrint/ExpressPrint.js?"+number+"\"><\/script\>");
//alert("\<script language=\"javascript\" type=\"text/javascript\" src=\"js/YearReportLuRu.js?"+number+"\"><\/script\>");//测试
</script>
 查看IE文件,文件形式为ExpressPrint.js?2011615105127
这样浏览器就会以为每次引用的js文件都是不同的,当然对ExpressPrint.js对后面的动态数并不进行处理。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
系统存储过程sp_MSforeachtable和sp_MSforeachdb,是微软提供的两个不公开的存储过程,从mssql6.5开始。存放在SQL Server的MASTER数据库中。可以用来对某个数据库的所有表或某个SQL服务器上的所有数据库进行管理
参数说明:

   @command1 nvarchar(2000),                      --第一条运行的SQL指令
   @replacechar nchar(1) = N'?',                      --指定的占位符号,默认为?
   @command2 nvarchar(2000)= null,            --第二条运行的SQL指令
   @command3 nvarchar(2000)= null,            --第三条运行的SQL指令
   @whereand nvarchar(2000)= null,               --可选条件来选择表
   @precommand nvarchar(2000)= null,        --执行指令前的操作(类似控件的触发前的操作)
   @postcommand nvarchar(2000)= null       --执行指令后的操作(类似控件的触发后的操作)

   以后为sp_MSforeachtable的参数,sp_MSforeachdb不包括参数@whereand

如:查询当前数据库中所有以bd开头的表的容量

查询一条用:sp_spaceused

多条用:
CREATE TABLE #TableSpaceUsed(
TableName SYSNAME,
Rows INT,
Reserved VARCHAR(20),
DataSize VARCHAR(20),
IndexSize VARCHAR(20),
UnUsed VARCHAR(20))

EXEC sp_MSForEachTable
@command1=N'insert into #TableSpaceUsed exec sp_spaceused ''?''',@whereand='and o.name like ''%'''

SELECT * FROM #TableSpaceUsed
ORDER BY CONVERT(INT,REPLACE(Reserved,' KB','')) DESC
--更新PUBS数据库中已t开头的所有表的统计: EXEC sp_MSforeachtable @whereand="and name like 't%'", @replacechar='*', @precommand="print 'Updating Statistics.....' print ''", @command1="print '*' update statistics * ", @postcommand= "print''print 'Complete Update Statistics!'" --遍历数据库文件

--遍历数据库文件
CREATE TABLE #DataBaseFiles(
DB SYSNAME,
LogicName SYSNAME,
physical_name nvarchar(260),
FILENAME nvarchar(260),
FileSize DECIMAL(18,1)
)

--要用user ? 否则返回的结果仍是当前库的数据
EXEC sp_MSforeachdb 'USE ?  insert into #DataBaseFiles SELECT ''?'',name, substring(filename,len(filename) - charindex(''\'', reverse(filename))+2,charindex(''\'', reverse(filename))),filename, CONVERT(DECIMAL(18,1),(size*8.0/(1024*1024))) AS Size_GB FROM sys.sysfiles '

SELECT *
FROM #DataBaseFiles

Run same command on all SQL Server databases without cursors


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, tableA JOIN tableB ON …
对于tableA与tableB满足ON条件的抓出。
过程模拟:对于tableA的每一行记录,遍历tableB的每行记录,若tableA与tableB的当前记录都满足ON条件,那么将tableA与tableB的当前记录取出,遍历完之后,若有LEFT,JOIN之类,则在取出的结果表中再加上没有满足条件的tableA外行即可。
即:LEFT JOIN 与 JOIN的区别在于:在对ON条件执行过滤后,是否再增加外行。
2,理解
1)
tableA JOIN tableB ON 1=1 :对于tableA与tableB的每一条记录,都满足1=1故相当于求tableA与tableB的笛卡儿积。
tableA LEFT JOIN tableB ON 1=1: 对于tableA与tableB的每一条记录,都满足1=1,抓取出。然后将不满足条件的tableA的行取出加上,但tableA所有记录都满足条件,故增加的外行为0 即此时:LEFT JOIN = JOIN
2) tableA JOIN tableB ON tableA.id = 1 :将tableA ID为1的与tableB所有记录连接。
tableA LEFT JOIN tableB ON tableA.id = 1 :将tableA ID为1的与tableB所有记录连接,然后再将tableA ID不为1的加上。

3) on 后的条件为>=或<=时,可用来求解阶梯问题。


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,判断集合A是否属于集合B
* 2,判断集合A是否等于集合B
若集合wa属于集合wb,那么wa的任意一个元素都会在集合wb中存在,并且wb的元素数量要>=wa的元素数量*/

WITH wa AS (
SELECT 'a1' product
UNION ALL
SELECT 'b2'
),
wb AS (
SELECT 'Ta' TYPE,'a1' product
UNION ALL
SELECT 'Ta' ,'b2'
UNION ALL
SELECT 'Tb' ,'a1'
UNION ALL
SELECT 'Tb' ,'b2'
UNION ALL
SELECT 'Tb' ,'c3'
UNION ALL
SELECT 'Tc' ,'a1'
UNION ALL
SELECT 'Td' ,'b2'     
UNION ALL
SELECT 'Td' ,'c3'  
UNION ALL
SELECT 'Te' ,'a1'
UNION ALL
SELECT 'Te' ,'a1'
UNION ALL
SELECT 'Tf' ,'a1'
UNION ALL
SELECT 'Tf' ,'d1'
)

/*若集合wa属于集合wb,那么wa的任意一个元素都会在集合wb中存在,并且wb的元素数量要>=wa的元素数量*/

/* 1,集合属于判断*/
SELECT b.type
FROM wb b(NOLOCK)
JOIN wa a(NOLOCK) ON b.product = a.product  --取出至少包含wa一个元素的所有集合
GROUP BY b.type
HAVING COUNT(DISTINCT b.product) = (SELECT COUNT(1) FROM wa) --保证wa的任意一个元素都会在集合wb中存在                                                         --
ORDER BY b.type

/*2,集合等于判断
SELECT b.type
FROM wb b(NOLOCK)
JOIN wa a(NOLOCK) ON b.product = a.product  --取出至少包含wa一个元素的所有集合
WHERE  ( SELECT COUNT(1) FROM wb WHERE wb.type = b.type  ) = ( SELECT COUNT(1) FROM wa) --集合数量要相等
GROUP BY b.type
HAVING COUNT(DISTINCT b.product) = (SELECT COUNT(1) FROM wa) --保证wa的任意一个元素都会在集合wb中存在                                                               --
ORDER BY b.type


*/


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

参考:http://technet.microsoft.com/zh-cn/library/ms144259(SQL.90).aspx
运行:start /wait setup.exe /qb /settings setup.ini (注:setup.exe最好是SQL Server x86\Servers下的)
start /wait :dos命令,启动应用程序并等待它结束。
setup.ini可参考\SQL Server x86\Servers下的template.ini文件
注:其中的/qb表示可看见安装画面,若改为/qn则完全在后台运行安装
setup.ini配置:
[Options]
USERNAME=user
COMPANYNAME=lvshou
PIDKEY=B4H74BJX3P37RX2J9TTBH9RMJ
INSTALLSQLDIR=”C:\Program Files\Microsoft SQL Server\”
INSTALLOLAPDATADIR=”C:\Program Files\Microsoft SQL Server\MSSQL\OLAP\Data”
ADDLOCAL=All
INSTANCENAME=MSSQLSERVER
SECURITYMODE=SQL
SAPWD=LifeIsGood
SQLACCOUNT=NT AUTHORITY\SYSTEM
AGTACCOUNT=NT AUTHORITY\SYSTEM
SQLBROWSERACCOUNT=NT AUTHORITY\SYSTEM
ASACCOUNT=NT AUTHORITY\SYSTEM
RSACCOUNT=NT AUTHORITY\SYSTEM
SQLBROWSERAUTOSTART=1
SQLAUTOSTART=1
AGTAUTOSTART=1

注:INSTALLOLAPDATADIR,数据库文件(如.mdf和.ldf)的默认存放目录
ASACCOUNT:Analysis Services
RSACCOUNT:Reprot Services
SQLBROWSERAUTOSTART=1 1为自动启动,0为手动启动。
SQLAUTOSTART=1
AGTAUTOSTART=1
SECURITYMODE=SQL :身份验证模式,当为sql时表示混合验证,若未指定,则是windows验证

SQLServer2005SP3-KB955706-x86-CHS.exe /quiet /allinstances


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

对于结果集包含NULL的情况:
1,当用IN时,若在结果集中存在,则返回TRUE,若在结果集中不存在,因结果集中有NULL,则返回UNKNOWN, UNKNOWN类似于False,故用IN可返回TRUE或False,同用Exists一样。
2,用IN时,返回TRUE或UNKNOWN,那么用NOT IN时,就返回NOT TRUE 或NOT UNKNOWN 即:False或NOT UNKNOWN,因NOT UNKNOWN = UNKNOWN,类似于False,故对于结果集包含NULL时,会一直返回False!即一直没有结果。
故:当当用NOT IN时,若不能保证结果集一定没有NULL,则最好用NOT EXISTS


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

IIS网站文件夹权限配置
1,文件夹读权限:开通IIS匿名访问账号、应用程序池对应账号的读权限,(一般为NET WORK SERVICE.)
2, 对于需要写入的文文件夹,如文件上传,开通程序池对应账号的写权限,上传目录的IIS执行权限设为“无”
3,其它权限不开。
注:若不开IIS匿名访问账号的读权限,会报401权限错误。
若不开程序池对应账号的读权限 会报Server Application Unavailable错误。
若对于写文件夹,不开程序池对应账号的写权限,将不能写入。

注:
IIS 面板中的“写入”权限实际上是对 HTTP PUT 指令的处理,对于普通网站,一般情况下这个权限是不打开的。
IIS 面板中的“脚本资源访问”不是指可以执行脚本的权限,而是指可以访问源代码的权限,用webdav的客户端(IE)可以打开ASP文件,就直接看到源代码并且修改。


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

IIS网站配置:如网站所在目录、用了FrameWork哪个版本等信息。

一、IIS的备份

1.在本地计算机上的 IIS 管理单元中,右键单击 Internet 信息服务下面的计算机图标。

2.选择“所有任务\备份/还原配置”选项。

3.点击“创建备份”按钮,在配置备份名称下输入你为备份起的名字

4.将“使用密码加密备份”勾选上(如果在做备份的时候,没有将“使用密码加密备份”勾选上,那么在重新安装系统后或者在另外一台计算机上还原时会提示”无效的签名”)

.输入密码,备份完成。

注:备份后的备份文件在C:\WINDOWS\system32\inetsrv\MetaBack\ (X代表你安装系统的盘符)。

二、还原到其他服务器上:

将备份文件.sc0和.md0 copy到系统C:\WINDOWS\system32\inetsrv\MetaBack\目录下,右键单击 Internet 信息服务下面的计算机图标,执行还原操作。


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

c:\Program Files\Common Files\microsoft shared\OFFICE12

\Office Setup Controller\”,找到SETUP.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

总则:观察规律,将规律固定下来。
连续范围:1,2,3,4,7,8,11,12,15
连续范围为:1,2,3,4 | 7,8 |11,12
特点:若按从小到大的顺序给行号,则在连续范围中的与行号相减,应为一固定数值
如:
字段值 行号 相减值
1 1 0
2 2 0
3 3 0
4 4 0
7 5 2
8 6 2
11 7 4
12 8 4
15 9 6
相减值相对的是处于连续范围内,按此值分组,求最小字段值、最大字段值即是连续范围

如: 求6月份连续业绩大于100万的日期范围
第一:求日期相减值; 第二:分组求范围

/*6月份业绩超过100万的日期范围*/
WITH DayAchievement AS(
SELECT CONVERT(VARCHAR(10),bo.OrderDate,120) OrderDate,SUM(amount) OrderSum
FROM bdOrder bo(NOLOCK)
JOIN mdOrderStatus mos(NOLOCK) ON bo.OrderStatus = mos.StatusCode AND mos.IsAchievement = 1
WHERE bo.OrderDate >=’2011-06-01′
GROUP BY CONVERT(VARCHAR(10),bo.OrderDate,120)
)

SELECT MIN(OrderDate),MAX(OrderDate),
DATEDIFF(dd,MIN(OrderDate),MAX(OrderDate))+1,
SUM(OrderSum)
FROM (
SELECT a.OrderDate,a.OrderSum,DATEADD(dd,-1 * ROW_NUMBER() OVER ( ORDER BY a.OrderDate)+1,a.OrderDate) gy
FROM DayAchievement a
WHERE OrderSum >= 1000000
)m
GROUP BY gy

注:DATEADD(dd,-1 * ROW_NUMBER() OVER ( ORDER BY a.OrderDate)+1,a.OrderDate) gy 即是相减值(规律值)


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, 京东、淘宝这样的网上商城是综合性的,除按分类查询外,还要据属性进行进一步的筛选。它各种分类、各种产品都有,对应的产品属性是不一样的,将所有产品放到一张表中存储显然是不可取的,因为这样此表的栏位要多的不可想像,并且每种产品对应的属性栏位并不多,大部分栏位都浪费掉。
所以设计时:产品属性不能固化下来,而是要以行的形式存储。
对应结构为:
商品ID对应分类ID
分类ID对应属性组ID
商品属性ID对应商品ID、属性组ID、属性值
属性ID对应属性名称

2,而小一些的电子商城若只按分类查询,没有涉及属性的进一步的筛选,并且产品属于有限个种类,如保健药品类与健身器材类,因药类与器材类属性大部分相同,故分别开两张表即可:保健药品表、健身器材表。再加个产品与分类ID的关系表。

注:表设计的目的是将近相同属性的东西放到一块,有明显区别的需要拆分


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
中值:若总数为奇数,则中数为中间那个,若为偶数,则为中间两个平均 WITH RN AS(
SELECT CONVERT(VARCHAR(10),a.OrderDate,120) OrderDate,amount,
ROW_NUMBER () OVER ( PARTITION BY CONVERT(VARCHAR(10),a.OrderDate,120)  ORDER BY a.Amount,a.id) rx,
ROW_NUMBER () OVER ( PARTITION BY CONVERT(VARCHAR(10),a.OrderDate,120)  ORDER BY a.Amount DESC,a.id DESC  ) rl
FROM bdOrder a(NOLOCK)WHERE a.OrderDate >='2011-05-01' )
注:正序与倒序排,因为Amount值相同的情况,故要加id决定决胜因子。