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


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,OrderBy 列名
2, OrderBy 第几列??? 如:OrderBy 2???? 按第二列排序?????? OrderBy newid() 随机排序
3, 逆序排: OrderBy 列名 desc? 或Order By -列名


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 Server,具体的操作,要在每个数据库中建立用户,并指定这个用户与登录名关联,这样在通过某个登录名进入之后,就可直接用关联的用户进行数据库的读写操作。

应用:当建立过关联的登录名删除之后,再重新建立此登录名并指定与数据库关联的用户时会出现:
用户、组或角色’test’在当前数据库中已存在(Microsoft SQL Server,错误:15023)
这是因为指定的关联的用户名已经存在,解决方法:
1,指定一个新的关联用户名即可。
2,删除掉原来关联的用户名,再关联
3,修复与登录名与原来的用户名的关联:
sp_change_users_login ‘Report’? –查看
sp_change_users_login ‘update_one’, ‘用户名’, ‘登录名’


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,有时对表做分割可以提高性能。表分割有两种方式:  
  1水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。
  水平分割通常在下面的情况下使用。
  ?表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
   ?表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
  ?需要把数据存放到多个介质上。
? 水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。  
  2垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。
  如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。


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

在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:

select * from gc_dfys

union

select * from ls_jg_dfys

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:

select * from gc_dfys

union all

select * from ls_jg_dfys