创意SQL语句(2)_47780cno-程序员宅基地

技术标签: database  oracle  insert  SQL Server  数据库  sql server  sql  

----------------------------------

1.把某个字段重新生气序列(从1到n):
DECLARE @i int
Set @i = 0
Update Table1 Set @i = @i + 1,Field1 = @i

2.按成绩排名次
Update 成绩表
Set a.名次 = (
Select Count(*) + 1
From 成绩表 b
Where a.总成绩 < b.总成绩
)
From 成绩表 a

3.查询外部数据库
Select a.*
From OpenRowSet('Microsoft.Jet.OLEDB.4.0','c:/test.mdb';'admin';'',Table1) a

4.查询Excel文件
Select *
From OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...Sheet1$

5.在查询中指定排序规则
Select * From Table1 order By Field1 COLLATE Chinese_PRC_BIN
为什么要指定排序规则呢?参见:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1633985
例,检查数据库中的Pub_Users表中是否存在指定的用户:
Select Count(*) From Pub_Users Where [UserName]='admin' And [PassWord]='aaa' COLLATE Chinese_PRC_BIN
默认比较是不区分大小写的,如果不加COLLATE Chinese_PRC_BIN,那么密码aaa与AAA是等效的,这当然与实际不符.注意的是,每个条件都要指定排序规则,上例中用户名就不区分大小写.


6.Order By的一个小技巧
order By可以指定列序而不用指定列名,在下面的例子里说明它的用处(注意,第三列未指定别名)
Select a.ID,a.Name,(Select Count(*) From TableB b Where a.ID=b.PID) From TableA a order By 3

 

2 ? Microsoft SQL Server 2005 Product Guide
2007-04-22T11:13:05+08:00 | rxl

推荐给学生阅读的文章,较为详细的说明了Microsoft SQL Server 2005方方面面,具有很好的学习价值,对于了解和学习Microsoft SQL Server 2005有很好的借鉴意义。

前期提供给盛浩峰和张飞进行阅读,希望他们拿出一份翻译稿件来,但是一直没有收到成效。但是他们做了一些标注,还是直接借鉴的,尽管没有看完。

盛浩峰阅读批示后的文章

张飞阅读批示后的文章


3 ? sql server 中【农历】计算方法
2007-02-02T08:00:00+08:00 | rxl

最近几天,一时兴起,开始研究农历,趁着元旦放假,把它给做出来了!拿给大家看看,我自己测试觉得没有问题,请大家看看!

1、建一表,放初始化资料
因为农历的日期,是由天文学家推算出来的,到现在只有到2049年的,以后的有了还可以加入!
Create TABLE SolarData
(
    yearId int not null,
    data char(7) not null,
    dataInt int not null
)

--插入数据
Insert INTO
SolarData Select 1900,'0x04bd8',19416 UNION ALL Select 1901,'0x04ae0',19168
UNION ALL Select 1902,'0x0a570',42352 UNION ALL Select 1903,'0x054d5',21717
UNION ALL Select 1904,'0x0d260',53856 UNION ALL Select 1905,'0x0d950',55632
UNION ALL Select 1906,'0x16554',91476 UNION ALL Select 1907,'0x056a0',22176
UNION ALL Select 1908,'0x09ad0',39632 UNION ALL Select 1909,'0x055d2',21970
UNION ALL Select 1910,'0x04ae0',19168 UNION ALL Select 1911,'0x0a5b6',42422
UNION ALL Select 1912,'0x0a4d0',42192 UNION ALL Select 1913,'0x0d250',53840
UNION ALL Select 1914,'0x1d255',119381 UNION ALL Select 1915,'0x0b540',46400
UNION ALL Select 1916,'0x0d6a0',54944 UNION ALL Select 1917,'0x0ada2',44450
UNION ALL Select 1918,'0x095b0',38320 UNION ALL Select 1919,'0x14977',84343
UNION ALL Select 1920,'0x04970',18800 UNION ALL Select 1921,'0x0a4b0',42160
UNION ALL Select 1922,'0x0b4b5',46261 UNION ALL Select 1923,'0x06a50',27216
UNION ALL Select 1924,'0x06d40',27968 UNION ALL Select 1925,'0x1ab54',109396
UNION ALL Select 1926,'0x02b60',11104 UNION ALL Select 1927,'0x09570',38256
UNION ALL Select 1928,'0x052f2',21234 UNION ALL Select 1929,'0x04970',18800
UNION ALL Select 1930,'0x06566',25958 UNION ALL Select 1931,'0x0d4a0',54432
UNION ALL Select 1932,'0x0ea50',59984 UNION ALL Select 1933,'0x06e95',28309
UNION ALL Select 1934,'0x05ad0',23248 UNION ALL Select 1935,'0x02b60',11104
UNION ALL Select 1936,'0x186e3',100067 UNION ALL Select 1937,'0x092e0',37600
UNION ALL Select 1938,'0x1c8d7',116951 UNION ALL Select 1939,'0x0c950',51536
UNION ALL Select 1940,'0x0d4a0',54432 UNION ALL Select 1941,'0x1d8a6',120998
UNION ALL Select 1942,'0x0b550',46416 UNION ALL Select 1943,'0x056a0',22176
UNION ALL Select 1944,'0x1a5b4',107956 UNION ALL Select 1945,'0x025d0',9680
UNION ALL Select 1946,'0x092d0',37584 UNION ALL Select 1947,'0x0d2b2',53938
UNION ALL Select 1948,'0x0a950',43344 UNION ALL Select 1949,'0x0b557',46423
UNION ALL Select 1950,'0x06ca0',27808 UNION ALL Select 1951,'0x0b550',46416
UNION ALL Select 1952,'0x15355',86869 UNION ALL Select 1953,'0x04da0',19872
UNION ALL Select 1954,'0x0a5d0',42448 UNION ALL Select 1955,'0x14573',83315
UNION ALL Select 1956,'0x052d0',21200 UNION ALL Select 1957,'0x0a9a8',43432
UNION ALL Select 1958,'0x0e950',59728 UNION ALL Select 1959,'0x06aa0',27296
UNION ALL Select 1960,'0x0aea6',44710 UNION ALL Select 1961,'0x0ab50',43856
UNION ALL Select 1962,'0x04b60',19296 UNION ALL Select 1963,'0x0aae4',43748
UNION ALL Select 1964,'0x0a570',42352 UNION ALL Select 1965,'0x05260',21088
UNION ALL Select 1966,'0x0f263',62051 UNION ALL Select 1967,'0x0d950',55632
UNION ALL Select 1968,'0x05b57',23383 UNION ALL Select 1969,'0x056a0',22176
UNION ALL Select 1970,'0x096d0',38608 UNION ALL Select 1971,'0x04dd5',19925
UNION ALL Select 1972,'0x04ad0',19152 UNION ALL Select 1973,'0x0a4d0',42192
UNION ALL Select 1974,'0x0d4d4',54484 UNION ALL Select 1975,'0x0d250',53840
UNION ALL Select 1976,'0x0d558',54616 UNION ALL Select 1977,'0x0b540',46400
UNION ALL Select 1978,'0x0b5a0',46496 UNION ALL Select 1979,'0x195a6',103846
UNION ALL Select 1980,'0x095b0',38320 UNION ALL Select 1981,'0x049b0',18864
UNION ALL Select 1982,'0x0a974',43380 UNION ALL Select 1983,'0x0a4b0',42160
UNION ALL Select 1984,'0x0b27a',45690 UNION ALL Select 1985,'0x06a50',27216
UNION ALL Select 1986,'0x06d40',27968 UNION ALL Select 1987,'0x0af46',44870
UNION ALL Select 1988,'0x0ab60',43872 UNION ALL Select 1989,'0x09570',38256
UNION ALL Select 1990,'0x04af5',19189 UNION ALL Select 1991,'0x04970',18800
UNION ALL Select 1992,'0x064b0',25776 UNION ALL Select 1993,'0x074a3',29859
UNION ALL Select 1994,'0x0ea50',59984 UNION ALL Select 1995,'0x06b58',27480
UNION ALL Select 1996,'0x055c0',21952 UNION ALL Select 1997,'0x0ab60',43872
UNION ALL Select 1998,'0x096d5',38613 UNION ALL Select 1999,'0x092e0',37600
UNION ALL Select 2000,'0x0c960',51552 UNION ALL Select 2001,'0x0d954',55636
UNION ALL Select 2002,'0x0d4a0',54432 UNION ALL Select 2003,'0x0da50',55888
UNION ALL Select 2004,'0x07552',30034 UNION ALL Select 2005,'0x056a0',22176
UNION ALL Select 2006,'0x0abb7',43959 UNION ALL Select 2007,'0x025d0',9680
UNION ALL Select 2008,'0x092d0',37584 UNION ALL Select 2009,'0x0cab5',51893
UNION ALL Select 2010,'0x0a950',43344 UNION ALL Select 2011,'0x0b4a0',46240
UNION ALL Select 2012,'0x0baa4',47780 UNION ALL Select 2013,'0x0ad50',44368
UNION ALL Select 2014,'0x055d9',21977 UNION ALL Select 2015,'0x04ba0',19360
UNION ALL Select 2016,'0x0a5b0',42416 UNION ALL Select 2017,'0x15176',86390
UNION ALL Select 2018,'0x052b0',21168 UNION ALL Select 2019,'0x0a930',43312
UNION ALL Select 2020,'0x07954',31060 UNION ALL Select 2021,'0x06aa0',27296
UNION ALL Select 2022,'0x0ad50',44368 UNION ALL Select 2023,'0x05b52',23378
UNION ALL Select 2024,'0x04b60',19296 UNION ALL Select 2025,'0x0a6e6',42726
UNION ALL Select 2026,'0x0a4e0',42208 UNION ALL Select 2027,'0x0d260',53856
UNION ALL Select 2028,'0x0ea65',60005 UNION ALL Select 2029,'0x0d530',54576
UNION ALL Select 2030,'0x05aa0',23200 UNION ALL Select 2031,'0x076a3',30371
UNION ALL Select 2032,'0x096d0',38608 UNION ALL Select 2033,'0x04bd7',19415
UNION ALL Select 2034,'0x04ad0',19152 UNION ALL Select 2035,'0x0a4d0',42192
UNION ALL Select 2036,'0x1d0b6',118966 UNION ALL Select 2037,'0x0d250',53840
UNION ALL Select 2038,'0x0d520',54560 UNION ALL Select 2039,'0x0dd45',56645
UNION ALL Select 2040,'0x0b5a0',46496 UNION ALL Select 2041,'0x056d0',22224
UNION ALL Select 2042,'0x055b2',21938 UNION ALL Select 2043,'0x049b0',18864
UNION ALL Select 2044,'0x0a577',42359 UNION ALL Select 2045,'0x0a4b0',42160
UNION ALL Select 2046,'0x0aa50',43600 UNION ALL Select 2047,'0x1b255',111189
UNION ALL Select 2048,'0x06d20',27936 UNION ALL Select 2049,'0x0ada0',44448

Create FUNCTION fn_GetLunar(@solarDay DATETIME)   
RETURNS varchar(10)--datetime 
 
AS   
BEGIN   
  DECLARE @solData int   
  DECLARE @offset int   
  DECLARE @iLunar int   
  DECLARE @i INT    
  DECLARE @j INT    
  DECLARE @yDays int   
  DECLARE @mDays int   
  DECLARE @mLeap int   
  DECLARE @mLeapNum int   
  DECLARE @bLeap smallint   
  DECLARE @temp int   
   
  DECLARE @YEAR INT    
  DECLARE @MONTH INT   
  DECLARE @DAY INT   
     
  DECLARE @OUTPUTDATE varchar(10) --DATETIME   
 
  --保证传进来的日期是不带时间   
  SET @solarDay=cast(@solarDay AS char(10))   
  SET @offset=CAST(@solarDay-'1900-01-30' AS INT) 
 
   
  --确定农历年开始   
  SET @i=1900   
  --SET @offset=@solData   
  WHILE @i<2050 AND @offset>0   
  BEGIN   
    SET @yDays=348   
    SET @mLeapNum=0   
    Select @iLunar=dataInt FROM SolarData Where
yearId=@i   
   
    --传回农历年的总天数   
    SET @j=32768   
    WHILE @j>8   
    BEGIN   
      IF @iLunar & @j >0   
        SET @yDays=@yDays+1   
      SET @j=@j/2   
    END   
   
    --传回农历年闰哪个月 1-12 , 没闰传回 0   
    SET @mLeap = @iLunar & 15   
   
    --传回农历年闰月的天数 ,加在年的总天数上   
    IF @mLeap > 0   
    BEGIN   
      IF @iLunar & 65536 > 0   
        SET @mLeapNum=30   
      ELSE    
        SET @mLeapNum=29   
   
      SET @yDays=@yDays+@mLeapNum   
    END   
       
    SET @offset=@offset-@yDays   
    SET @i=@i+1   
  END   
     
  IF @offset <= 0   
  BEGIN   
    SET @offset=@offset+@yDays   
    SET @i=@i-1   
  END   
  --确定农历年结束     
  SET @YEAR=@i   
 
  --确定农历月开始   
  SET @i = 1   
  Select @iLunar=dataInt FROM SolarData Where
yearId=@YEAR 
 
  --判断那个月是润月   
  SET @mLeap = @iLunar & 15   
  SET @bLeap = 0  
 
  WHILE @i < 13 AND @offset > 0   
  BEGIN   
    --判断润月   
    SET @mDays=0   
    IF (@mLeap > 0 AND @i = (@mLeap+1) AND @bLeap=0)   
    BEGIN--是润月   
      SET @i=@i-1   
      SET @bLeap=1   
      --传回农历年闰月的天数   
      IF @iLunar & 65536 > 0   
        SET @mDays = 30   
      ELSE    
        SET @mDays = 29   
    END   
    ELSE   
    --不是润月   
    BEGIN   
      SET @j=1   
      SET @temp = 65536    
      WHILE @j<
=@i   
      BEGIN   
        SET @temp=@temp/2   
        SET @j=@j+1   
      END   
   
      IF @iLunar & @temp > 0   
        SET @mDays = 30   
      ELSE   
        SET @mDays = 29   
    END   
     
    --解除闰月 
    IF @bLeap=1 AND @i= (@mLeap+1) 
      SET @bLeap=0 
 
    SET @offset=@offset-@mDays   
    SET @i=@i+1   
  END   
   
  IF @offset <= 0   
  BEGIN   
    SET @offset=@offset+@mDays   
    SET @i=@i-1   
  END   
 
  --确定农历月结束     
  SET @MONTH=@i 
   
  --确定农历日结束     
  SET @DAY=@offset   
   
--  SET @OUTPUTDATE=CAST((CAST(@YEAR AS VARCHAR(4))+'-'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2))) AS

DATETIME)   
  SET @OUTPUTDATE=CAST(@YEAR AS VARCHAR(4))+right('00'+CAST(@MONTH AS VARCHAR(2)),2)+right('00'+CAST(@DAY AS VARCHAR

(2)),2)   
  RETURN @OUTPUTDATE 
END  
GO

--调用方法
select dbo.fn_GetLunar(getdate())

--删除测试
drop function fn_GetLunar
drop table SolarData

 

4 ? SQL查询语句精华使用简要
2007-02-02T07:58:18+08:00 | rxl

一、 简单查询
  简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
  例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。

   Select nickname,email
  FROM testtable
  Where name='张三'

  (一) 选择列表

  选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

  1、选择所有列

  例如,下面语句显示testtable表中所有列的数据:

   Select *
  FROM testtable

  2、选择部分列并指定它们的显示次序

  查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
  例如:

   Select nickname,email
  FROM testtable

  3、更改列标题

  在选择列表中,可重新指定列标题。定义格式为:
  列标题=列名
  列名 列标题
  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

   Select 昵称=nickname,电子邮件=email
  FROM testtable

  4、删除重复行

  Select语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在Select返回的结果集合中只保留一行。

  5、限制返回的行数

  使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
  例如:

   Select TOP 2 *
  FROM testtable
  Select TOP 20 PERCENT *
  FROM testtable

  (二)FROM子句

  FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

    Select username,citytable.cityid
  FROM usertable,citytable
  Where usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格式为表或视图指定别名:
  表名 as 别名
  表名 别名

  (二) FROM子句

  FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

   Select username,citytable.cityid
  FROM usertable,citytable
  Where usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格式为表或视图指定别名:
  表名 as 别名
  表名 别名
  例如上面语句可用表的别名格式表示为:

   Select username,b.cityid
  FROM usertable a,citytable b
  Where a.cityid=b.cityid

  Select不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

  例如:

    Select a.au_fname+a.au_lname
  FROM authors a,titleauthor ta
  (Select title_id,title
  FROM titles
  Where ytd_sales>10000
  ) AS t
  Where a.au_id=ta.au_id
  AND ta.title_id=t.title_id

  此例中,将Select返回的结果集合给予一别名t,然后再从中检索数据。

(三) 使用Where子句设置查询条件

  Where子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

   Select *
  FROM usertable
  Where age>20

  Where子句可包括各种条件运算符:
  比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
  范围运算符(表达式值是否在指定的范围):BETWEEN...AND...
  NOT BETWEEN...AND...
  列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)
  NOT IN (项1,项2......)
  模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
  空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
  逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

  1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
  2、列表运算符例:country IN ('Germany','China')
  3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
  可使用以下通配字符:
  百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
  下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
  方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
  例如:
  限制以Publishing结尾,使用LIKE '%Publishing'
  限制以A开头:LIKE '[A]%'
  限制以A开头外:LIKE '[^A]%'

  4、空值判断符例Where age IS NULL

  5、逻辑运算符:优先级为NOT、AND、OR

  (四)查询结果排序

  使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
  ORDER BY {column_name [ASC|DESC]} [,...n]
  其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排
  序。
  例如:

    Select *
  FROM usertable
  ORDER BY age desc,userid ASC

  另外,可以根据表达式进行排序。

  二、 联合查询

  UNION运算符可以将两个或两个以上上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

    select_statement
  UNION [ALL] selectstatement
  [UNION [ALL] selectstatement][...n]

  其中selectstatement为待联合的Select查询语句。

  ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

  联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

  在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

  在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

  查询1 UNION (查询2 UNION 查询3)

  三、连接查询

  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

  连接可以在Select 语句的FROM子句或Where子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与Where子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

  SQL-92标准所定义的FROM子句的连接语法格式为:

   FROM join_table join_type join_table
  [ON (join_condition)]

  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

  join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

  交叉连接(CROSS JOIN)没有Where 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

  连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

  无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

   Select p1.pub_id,p2.pub_id,p1.pr_info
  FROM pub_info AS p1 INNER JOIN pub_info AS p2
  ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

  (一)内连接
  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

   Select *
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city
  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
  Select a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city

  (二)外连接
  内连接时,返回查询结果集合中的仅是符合查询条件( Where 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

   Select a.*,b.* FROM luntan LEFT JOIN usertable as b
  ON a.username=b.username

  下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

    Select a.*,b.*
  FROM city as a FULL OUTER JOIN user as b
  ON a.username=b.username

  (三)交叉连接
  交叉连接不带Where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
   Select type,pub_name
  FROM titles CROSS JOIN publishers
  ORDER BY type

  转http://blog.chinaunix.net/u/22313/showart.php?id=214419


5 ? MS SQL 2005 安全设置
2006-02-02T19:07:54+08:00 | rxl

拿到MS SQL 2005还没有一天,总的来说,MS SQL 2005的安全性比SQL 2000要强上不少,不过默认设置还是有和原来一样的漏洞,下面我们来修改一下默认设置。

1、安装MSSQL时使用混合模式,当然SA密码最好不能为空,在SQL2005中,可以对SA这个超级用户名进行修改或删除。
use master
Alter LOGIN [sa] WITH NAME=[zxs] /*修改SA帐号*/
sp_password '111111','123456','sa' /*修改SA密码*/
使用以上命令可修改SA帐号,也可进行图形化的修改
使用安全的帐号策略。对SA或等同用户进行最强的保护,当然,包括使用一个非常强壮的密码,如下图

 

这里可以看到SQL 2005比SQL 2000 增强的地方了。

2、SQL的认证有Windows身份认证和混合身份认证。在2005中,登陆SQL可以使用indows身份认证和混合身份认证方便,如果不希望系统管理员接触数据库的话,可以在安全性==登录名是把系统帐号“BUILTIN/Administrators”删除。当然,还有别的多余的帐号也可一同禁止,只需要在帐号==属性==状态中把是否允许连接到数据库引擎改为拒绝,还有登录改为禁用即可,不过这样的坏处就是当你忘了SA的密码时,我也没办法帮你啦。

也可用命令sp_change_users_login 'report' 搜索一下独立的帐户再删除

3、管理扩展存储过程
删除不必要的存储过程,因为有些存储过程能很容易地被人利用起来提升权限或进行破坏。
如果你不需要扩展存储过程xp_cmdshell请把它去掉。xp_cmdshell根本就是一个大后门。

如果不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:
sp_OACreate sp_OADestroy sp_OAGetErrorInfo sp_OAGetProperty
sp_OAMethod sp_OASetProperty sp_OAStop
去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:
xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumvalues
xp_regread xp_regremovemultistring xp_regwrite
还有一些其他的扩展存储过程,你也最好检查检查。
在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。运行以下SQL语句可删除所有危险的SP。

Drop PROCEDURE sp_makewebtask
exec master..sp_dropextendedproc xp_cmdshell /*命令行*/
exec master..sp_dropextendedproc xp_dirtree /*可以展开你需要了解的目录,获得所有目录深度*/
exec master..sp_dropextendedproc xp_fileexist /*用来确定一个文件是否存在*/
exec master..sp_dropextendedproc xp_getnetname /*可以获得服务器名称*/
exec master..sp_dropextendedproc xp_terminate_process
exec master..sp_dropextendedproc sp_oamethod
exec master..sp_dropextendedproc sp_oacreate
exec master..sp_dropextendedproc xp_regaddmultistring
exec master..sp_dropextendedproc xp_regdeletekey
exec master..sp_dropextendedproc xp_regdeletevalue
exec master..sp_dropextendedproc xp_regenumkeys
exec master..sp_dropextendedproc xp_regenumvalues
exec master..sp_dropextendedproc sp_add_job
exec master..sp_dropextendedproc sp_addtask
exec master..sp_dropextendedproc xp_regread
exec master..sp_dropextendedproc xp_regwrite
exec master..sp_dropextendedproc xp_readwebtask
exec master..sp_dropextendedproc xp_makewebtask
exec master..sp_dropextendedproc xp_regremovemultistring
exec master..sp_dropextendedproc sp_OACreate
Drop PROCEDURE sp_addextendedproc

5、SQL Server 2005本身就具有加密功能,完全集成了一个密钥管理架构。不过,最好远程网络连接时使用SSL来加密协议,这就需要一个证书来支持。这里搜索一下就会有很多这方面的说明,就不多说了。

6、使用IPSec策略阻止所有地址访问本机的TCP1433与UDP1434端口,也可对TCP1433端口进行修改,但是在SQL2005中,可以使用TCP动态端口,(在SQL Server Configuration Manager的SQL 2005网络配置中)如下图


这是SQL帮助中的说明
如果某个 SQL Server 实例已配置为侦听动态端口,则在启动时,该实例将检查操作系统中的可用端口,并为该端口打开一个端点。传入连接必须指定要连接的端口号。由于每次启动 SQL Server 时端口号都可能会改变,因此 SQL Server 提供 SQL Server 浏览器服务器,来监视端口并将传入连接指向该实例的当前端口。
也可对每个IP进行侦听


这是SQL帮助中的说明
指定 SQL Server 是否侦听所有绑定到计算机网卡的 IP 地址。如果设置为“否”,则使用每个 IP 地址各自的属性对话框对各个 IP 地址进行配置。如果设置为“是”,则 IPAll 属性框的设置将应用于所有 IP 地址。默认值为“是”。

当然你也可以下面的SQL Native Client 配置中新建一别名来指定你的SQL服务器和端口,也可在服务器属性==连接==远程服务器链接==把允许远程链接到本服务器的勾去掉
关闭远程链接命令行为
EXEC sys.sp_configure N'remote access', N'0'

8、对远程网络连接进行IP限制,SQL Server 2005如同SQL 2000一样没有提供网络连接的安全解决办法,但是Windows 2K以上系统了提供了IPSec策略。对远程网络连接的IP进行限制,只保证需要的IP能够访问,拒绝其他 IP进行的端口连接,把安全威胁降到最低。

9、在服务器的属性安全中,启用登录审核中的失败与成功登陆,启用C2审核跟踪,C2是一个政府安全等级,它保证系统能够保护资源并具有足够的审核能力。C2模式允许我们监视对所有数据库实体的所有访问企图。如图


启用C2审核的命令为
EXEC sys.sp_configure N'c2 audit mode', N'1'

以上的方法不是很完整,因为时间关系以后再慢慢研究。

 

6 ? SQL Server 2000 (SP4)笔记整理(三):触发器
2006-01-08T09:52:37+08:00 | rxl

/*
建立虚拟测试环境,包含:表[卷烟库存表],表[卷烟销售表]。
请大家注意跟踪这两个表的数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。
为了能更清晰的表述触发器的作用,表结构存在数据冗余,且不符合第三范式,这里特此说明。
*/

USE Master
GO

IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = '卷烟库存表')
    Drop TABLE 卷烟库存表
GO
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = '卷烟销售表')
    Drop TABLE 卷烟销售表
GO

--业务规则:销售金额 = 销售数量 * 销售单价 业务规则。

Create TABLE 卷烟销售表
(
    卷烟品牌        VARCHAR(40) PRIMARY KEY NOT NULL,
    购货商          VARCHAR(40) NULL,
    销售数量        INT NULL,
    销售单价        MONEY NULL,
    销售金额        MONEY NULL
)
GO

--业务规则:库存金额 = 库存数量 * 库存单价 业务规则。

Create TABLE 卷烟库存表
(
    卷烟品牌        VARCHAR(40) PRIMARY KEY NOT NULL,
    库存数量        INT NULL,
    库存单价        MONEY NULL,
    库存金额        MONEY NULL
)
GO

--创建触发器,示例1

/*
创建触发器[T_Insert_卷烟库存表],这个触发器较简单。
说明:      每当[卷烟库存表]发生 Insert 动作,则引发该触发器。
触发器功能:    强制执行业务规则,保证插入的数据中,库存金额 = 库存数量 * 库存单价。
注意:      [InsertED]、[DeleteD]为系统表,不可创建、修改、删除,但可以调用。
重要:      这两个系统表的结构同插入数据的表的结构。
*/
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'TR' AND NAME = 'T_Insert_卷烟库存表')
    Drop TRIGGER T_Insert_卷烟库存表
GO

Create TRIGGER T_Insert_卷烟库存表
ON 卷烟库存表
FOR Insert
AS
--提交事务处理
BEGIN TRANSACTION
    --强制执行下列语句,保证业务规则
    Update 卷烟库存表
    SET 库存金额 = 库存数量 * 库存单价
    Where 卷烟品牌 IN (Select 卷烟品牌 from InsertED)
COMMIT TRANSACTION
GO

/* 
针对[卷烟库存表],插入测试数据:
注意,第一条数据(红塔山新势力)中的数据符合业务规则,
第二条数据(红塔山人为峰)中,[库存金额]空,不符合业务规则,
第三条数据(云南映像)中,[库存金额]不等于[库存数量]乘以[库存单价],不符合业务规则。
第四条数据库存数量为0。
请注意在插入数据后,检查[卷烟库存表]中的数据是否 库存金额 = 库存数量 * 库存单价。
*/

Insert INTO 卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)
    Select '红塔山新势力',100,12,1200 UNION ALL
    Select '红塔山人为峰',100,22,NULL UNION ALL
    Select '云南映像',100,60,500      UNION ALL
    Select '玉溪',0,30,0
GO

--查询数据

Select * FROM 卷烟库存表
GO
/*

结果集

RecordId  卷烟品牌       库存数量  库存单价  库存金额
--------  ------------  --------  -------  ---------
1         红塔山新势力   100       12.0000  1200.0000
2         红塔山人为峰   100       22.0000  2200.0000
3         云南映像       100       60.0000  6000.0000
4         玉溪           0         30.0000  .0000

(所影响的行数为 4 行)

*/


--触发器示例2

/*
创建触发器[T_Insert_卷烟销售表],该触发器较复杂。
说明:       每当[卷烟库存表]发生 Insert 动作,则引发该触发器。
触发器功能:    实现业务规则。
业务规则:   如果销售的卷烟品牌不存在库存或者库存为零,则返回错误。
            否则则自动减少[卷烟库存表]中对应品牌卷烟的库存数量和库存金额。
*/
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'TR' AND NAME = 'T_Insert_卷烟销售表')
    Drop TRIGGER T_Insert_卷烟销售表
GO

Create TRIGGER T_Insert_卷烟销售表
ON 卷烟销售表
FOR Insert
AS
BEGIN TRANSACTION
    --检查数据的合法性:销售的卷烟是否有库存,或者库存是否大于零
    IF NOT EXISTS (
        Select 库存数量
        FROM 卷烟库存表
        Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED)
    )
        BEGIN
            --返回错误提示
            RAISERROR('错误!该卷烟不存在库存,不能销售。',16,1)
            --回滚事务
            ROLLBACK
            RETURN
        END

    IF EXISTS (
        Select 库存数量
        FROM 卷烟库存表
        Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED) AND
        库存数量 <= 0          
    )
        BEGIN
            --返回错误提示
            RAISERROR('错误!该卷烟库存小于等于0,不能销售。',16,1)
            --回滚事务
            ROLLBACK
            RETURN
        END
   
    --对合法的数据进行处理

    --强制执行下列语句,保证业务规则
    Update 卷烟销售表
    SET 销售金额 = 销售数量 * 销售单价
    Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED)

    DECLARE @卷烟品牌 VARCHAR(40)
    SET @卷烟品牌 = (Select 卷烟品牌 FROM InsertED)

    DECLARE @销售数量 MONEY
    SET @销售数量 = (Select 销售数量 FROM InsertED)

    Update 卷烟库存表
    SET 库存数量 = 库存数量 - @销售数量,
        库存金额 = (库存数量 - @销售数量)*库存单价
    Where 卷烟品牌 = @卷烟品牌
COMMIT TRANSACTION
GO

--请大家自行跟踪[卷烟库存表]和[卷烟销售表]的数据变化。
--针对[卷烟销售表],插入第一条测试数据,该数据是正常的。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红塔山新势力','某购货商',10,12,1200
GO

--针对[卷烟销售表],插入第二条测试数据,该数据 销售金额 不等于 销售单价 * 销售数量。
--触发器将自动更正数据,使 销售金额 等于 销售单价 * 销售数量。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红塔山人为峰','某购货商',10,22,2000
GO

--针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表 中找不到对应。
--触发器将报错。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红河V8','某购货商',10,60,600
GO

/*
结果集
服务器: 消息 50000,级别 16,状态 1,过程 T_Insert_卷烟销售表,行 15
错误!该卷烟不存在库存,不能销售。
*/

--针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表 中库存为0。
--触发器将报错。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '玉溪','某购货商',10,30,300
GO

/*
结果集
服务器: 消息 50000,级别 16,状态 1,过程 T_Insert_卷烟销售表,行 29
错误!该卷烟库存小于等于0,不能销售。
*/
--查询数据
Select * FROM 卷烟库存表

Select * FROM 卷烟销售表
GO

/*
补充:
1、本示例主要通过一个简单的业务规则实现来进行触发器使用的说明,具体的要根据需要灵活处理;
2、关于触发器要理解并运用好 InsertED ,DeleteD 两个系统表;
3、本示例创建的触发器都是 FOR Insert ,具体的语法可参考:

    Trigger语法

    Create TRIGGER trigger_name
    ON { table | view }
    [ WITH ENCRYPTION ] --用于加密触发器
    {
        { { FOR | AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] }
            [ WITH APPEND ]
            [ NOT FOR REPLICATION ]
            AS
            [ { IF Update ( column )
                [ { AND | OR } Update ( column ) ]
                    [ ...n ]
            | IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask )
                    { comparison_operator } column_bitmask [ ...n ]
            } ]
            sql_statement [ ...n ]
        }
    }

4、关于触发器,还应该注意
(1)、Delete 触发器不能捕获 TRUNCATE TABLE 语句。
(2)、触发器中不允许以下 Transact-SQL 语句:
        Alter DATABASE Create DATABASE DISK INIT
        DISK RESIZE Drop DATABASE LOAD DATABASE
        LOAD LOG RECONFIGURE RESTORE DATABASE
        RESTORE LOG
(3)、触发器最多可以嵌套 32 层。

*/

--修改触发器
--实质上,是将 Create TRIGGER ... 修改为 Alter TRIGGER ...即可。

--删除触发器
Drop TRIGGER xxx
GO

--删除测试环境
Drop TABLE 卷烟库存表
GO
Drop TABLE 卷烟销售表
GO
Drop TRIGGER T_Insert_卷烟库存表
GO
Drop TRIGGER T_Insert_卷烟销售表
GO

 


7 ? SQL Server 2000 (SP4)笔记整理(二):数据库表
2006-01-08T09:51:50+08:00 | rxl

USE Master
GO

--检查是否存在测试表,若存在,则删除之
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = 'MyTestTable1')
    Drop TABLE MyTestTable1
GO

Create TABLE MyTestTable1
(
    编号        INT PRIMARY KEY NOT NULL IDENTITY(1,1),
    姓名        CHAR(8),
    别名        VARCHAR(8),
    性别        CHAR(2) DEFAULT ('男'),
    年龄        INT CHECK(年龄>0 AND 年龄<100),
)ON [PRIMARY]
GO

--插入数据:

/*
下面的语句将不能执行,因为 [编号] 列为系统自动自增列。

Insert INTO MyTestTable1(编号,姓名,别名,性别,年龄)
    VALUES (1,'彭建军','彭建军','男',25)
GO

在当 IDENTITY_Insert 设置为 OFF 时,不能向表 'MyTestTable1' 中的标识列插入显式值。

*/

--正确的语句,方法一
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    VALUES ('彭建军','彭建军','男',25)
GO
--方法二:
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    Select '老转','老转','男',30 UNION ALL
    Select '钱妮','妮子','女',28
GO

--查询数据(注意编号的自增性)

Select * FROM MyTestTable1
GO

/*

结果集

编号          姓名       别名       性别   年龄         
----------- -------- -------- ---- -----------
1           彭建军      彭建军      男    25
2           老转        老转        男    30
3           钱妮        妮子        女    28

*/

--验证 默认值,不插入[性别]的值,则系统取默认值
Insert INTO MyTestTable1(姓名,别名,年龄)
    Select '潘颖','梨窝浅笑',25
GO

--查询
Select * FROM MyTestTable1 Where 姓名 = '潘颖'
GO

/*

结果集
编号          姓名       别名       性别   年龄         
----------- -------- -------- ---- -----------
4           潘颖       梨窝浅笑     男    25

*/

--验证 CHECK,插入[年龄]的值超过100,则系统报错
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    Select '蛋蛋','蛋蛋','女',120
GO

/*

结果集

Insert 语句与 COLUMN CHECK 约束 'CK__MyTestTable1__年龄__30B91D22' 冲突。该冲突发生于数据库 'master',表 'MyTestTable1', column '年龄'。
语句已终止。

*/

--修改表

--增加列
Alter Table MyTestTable1
ADD 备注    VARCHAR(50)
GO

--修改列定义
Alter Table MyTestTable1
Alter COLUMN 备注 VARCHAR(100)
GO

--清空表的数据

--方法一(删除的数据将记入日志)
Delete FROM MyTestTable1
GO

--如果是删除特定的行,则类似于 Delete FROM MyTestTable1 Where 编号 = 1

--方法二(删除的数据不记入日志,执行效率高)
TRUNCATE TABLE MyTestTable1
GO

--删除表(谨慎使用!)
Drop TABLE MyTestTable1
GO

 


8 ? SQL Server 2000 (SP4)笔记整理(一):数据库
2006-01-08T09:50:39+08:00 | rxl

--数据库创建示例1

--首先必须在C盘下建立[DataBase]文件夹

USE Master
GO

--检查是否存在测试数据库,若存在,则删除之
IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

Create DATABASE MyDB
ON
--数据文件
(
    NAME = MyDB_dat,
    FILENAME = 'C:/DataBase/MyDB_dat.mdf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
--日志文件
LOG ON
(
    NAME = MyDB_log,
    FILENAME = 'C:/DataBase/MyDB_log.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
)
GO

--数据库创建示例2

USE Master
GO

IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

USE Master
GO

Create DATABASE MyDB
ON
--主数据文件
(
    NAME = MyDB_dat1,
    FILENAME = 'C:/DataBase/MyDB_dat1.mdf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
),
--次要数据文件
(
    NAME = MyDB_dat2,
    FILENAME = 'C:/DataBase/MyDB_dat2.ndf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
LOG ON
--主日志
(
    NAME = MyDB_log1,
    FILENAME = 'C:/DataBase/MyDB_log1.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
),
--次要日志
(
    NAME = MyDB_log2,
    FILENAME = 'C:/DataBase/MyDB_log2.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
)
GO

--删除数据库(请谨慎使用!)

Drop DATABASE MyDB
GO

--分离数据库

EXEC sp_detach_db 'MyDB'
GO

--附加数据库

Create DATABASE MyDB
ON PRIMARY
(
    FILENAME = 'C:/DataBase/MyDB_dat1.mdf'
)
FOR ATTACH
GO

--修改数据库

--增加数据库数据文件
Alter DATABASE MyDB
ADD FILE
(
    NAME = MyDB_dat3,
    FILENAME = 'C:/DataBase/MyDB_dat3.ndf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
GO

--清除数据库数据文件
Alter DATABASE MyDB
REMOVE FILE MyDB_dat3
GO

--修改数据库配置参数
Alter DATABASE MyDB
MODIFY FILE
(
    NAME = 'MyDB_dat1',
    SIZE = 20MB
)
GO

--查询数据库信息

USE Master
GO

Select * FROM SYSDATABASES

 

--备份数据库

BACKUP DATABASE MyDB
    TO DISK = 'C:/DataBase/MyDB_BackUp.BAK'
GO

--利用备份还原数据库
IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

RESTORE FILELISTONLY
    FROM DISK = 'C:/DataBase/MyDB_BackUp.BAK'
RESTORE DATABASE  MyDB
    FROM DISK = 'C:/DataBase/MyDB_BackUp.BAK'
    WITH
        MOVE 'MyDB_dat'  TO  'C:/DataBase/MyDB_dat.mdf',
        MOVE 'MyDB_log'  TO  'C:/DataBase/MyDB_log.ldf'
GO 

 


9 ? 网管必知 了解二十个最危险的安全漏洞
2006-01-01T14:58:51+08:00 | rxl

大多数成功的蠕虫和其他网络攻击所依靠的都是少数几种通用操作系统中存在的安全漏洞。这些攻击者都是机会主义者。它们利用最简单、最便捷的路线,并且使用最有效且使用广泛的工具来寻找和利用众所周知的漏洞和弱点。如果企业没有及时修补漏洞,这些攻击者就会乘机而入,而且它们扫瞄Internet上任何有漏洞的系统,不分清红皂白地发起攻击。蠕虫这种攻击手段非常容易传播且破坏力巨大,例如Blaster、Slammer和Code Red等蠕虫都是直接利用未施加补丁的漏洞来四处传播并制造巨大的破坏。

四年前,SANS研究院和联邦调查局(FBI)的国家基础设施保护中心(NIPC)发布过一份文档,总结出了“10种最关键的Internet安全漏洞”。数以千计的企业都非常重视这份文档,并且认真对待列表中的漏洞问题。在此后的三年中,他们又发布了扩展的“最危险的20项安全漏洞”列表,希望企业能够尽早对照自己存在的不足并且及时关闭这些最危险的安全漏洞。该列表中列出了许多存在漏洞的服务,其中就包括引发Blaster、Slammer、Code Red及NIMDA蠕虫的那些臭名昭著的漏洞。

SANS这次发布的“最危险的20种漏洞”列表中事实上包括两个列表,每个包含10种漏洞,分别对应于Windows中最常被利用的10种漏洞和Unix及Linux环境下的10种最常见的漏洞。尽管每年都有数千种安全事件在影响着这些操作系统,但绝大多数成功的攻击都只瞄准了这20个漏洞中的一、两个。

在Windows漏洞列表中,排在最前面的是Web服务器和服务,而在Unix列表中,位居前列的是BIND域名系统。而每个条目有时都代表着一个非常广泛的类别。SANS的文档长达100多页,将问题归纳为一些具体的安全漏洞,并且提供了详尽的提示,以便用户对问题加以及时修正。

许多漏洞已经出现在过去发布的列表中,但据该列表的研究主任Ross Patel 称,今天的列表中有一些出人意料的东西。Patel指出,文件共享应用和即时消息分别位列Windows 列表中的第7位和第10位,它们都是比较新的漏洞类别。

Patel说:“专家们几乎一致认为文件共享和P2P是值得担忧的问题。”和即时消息一样,文件共享应用非常简单,而且易于使用,因此用户往往会忽略它们可能引发的安全问题。

Web浏览器位居Windows列表的第6位,而且该应用多年来一直是一个非常热门的安全话题。

Patel说:“对于世界任何一个角落的专家来说,Windows中唾手可得的Web浏览器是多数问题的来源,而且也是各种争议的焦点。”由于微软的IE浏览器存在的漏洞数量众多,因此许多安全专家在今年年初建议用户应当放弃IE浏览器而选择其他的浏览器,但负责本列表的专家却对该问题持有保留意见。

众所周知,这“最危险的20种漏洞”需要立即得到修补。这份列表是数十位顶级安全专家苦心研究的结果。这些专家来自英国、美国和新加坡等国家的最关注安全问题的政府机构、领先的安全软件厂商和咨询企业、顶级的大学安全项目,还有许多其他的用户组织和SANS研究院。在这份文档的结尾处列出了该项目中所有的参与者名单。

企业不再手忙脚乱

网络安全企业Qualys公司首席技术官Gerhard Eschelbeck认为,今年的“最危险的20种漏洞”列表将被企业广泛地使用,并且会成为企业考虑安全问题的基准。

Eschelbeck说:“业界和学术界的专家都一致认为,该列表中列出的都是一些最关键的漏洞。目前,每周新公布的漏洞数量达到了50个,也就是说每年就有2500个漏洞,因此企业如果想确定对哪些漏洞加以特别关注,就必须面临巨大的挑战。SANS的列表正好可以帮助他们优先处理那些危害最大的漏洞。”

SANS主任Alan Paller说:“当您要求自己的系统人员对数千个漏洞进行测试时,您的企业肯定会陷于停顿。而这份‘20个最危险的漏洞’列表则可以每年为您提供一份参考,帮助您着手修复系统中最关键的漏洞。”

Paller指出:“由于问题的范围相对较小,因此可以把这些问题交给系统管理员,并且给他们几个月的时间来解决问题,这样才是合理的方式。”


用户可以在SANS的网站上获得这份列表。

Windows系统中最危险的漏洞
1、 Web服务器及服务
2、工作站服务
3、 Windows远程访问服务
4、 Microsoft SQL Server
5、 Windows验证
6、 Web浏览器
7、 文件共享应用
8、 LSAS泄露
9、 邮件客户端
10、 即时消息

Unix系统中最危险的漏洞
1、BIND域名系统
2、Web服务器
3、验证
4、版本控制系统
5、邮件传输服务
6、简单网络管理协议(SNMP)
7、开放安全套接字层(SSL)
8、企业服务NIS/NFS的错误配置
9、数据库 
10、内核

 


10 ? 100个ORACLE相关的网址大全
2006-01-01T14:51:46+08:00 | rxl


国内ORACLE相关站点
名称
地址
介绍
Oracle中国公司
http://www.oracle.com/cn
提供最新的产品及服务介绍。
中国Oracle用户组
http://www.cnoug.org/
ORACLE爱好者之家
http://www.oraclefan.net/
Jonson Huo
免费ORACLE入门
http://fengyu.china.com/
余枫
Oracle杂货店
http://www.hzsdb.com.cn/oracle/index.htm
ORACLE深度历险
http://oracle9idba.nease.net/index1.htm
彩虹湾
http://www.irisbay.com/
提供oracle的相关知识,同时也提供dba、OCP证书等的论坛。
Oracle小组
http://oraclegroup.yeah.net/
smiling电子小组―Oracle小组
oracle技术站
http://oradb.jianwangzhan.com/cgi-bin/index.dll?index13?webid=jianwangzhan&userid=49339
Oracle9iAS Documentation Library, Release 2 (9.0.3)
http://download-west.oracle.com/docs/cd/A97688_06/index.htm
Oracle9i Database Concepts
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96524/toc.htm
ORACLE讨论区
名称
地址
介绍
ITPUB论坛
http://www.itpub.net/
CSDN数据库开发 Oracle
http://expert.csdn.net/expert/forum.asp?url=/Expert/ForumList.asp?roomid=1801&typenum=1&xmlsrc=&whichpage=1
ChinaUnix.net的Oracle论坛
http://chinaunix.net/forum/viewforum.php?f=19
Oracle Developer 6i 开发者论坛
http://61.144.28.248:8080/d6i/bbs_armok01/bbs_list.jsp
网易Oracle论坛(北京)
http://fe5.bj.163.com/cgi/docidx?guest=1&b=Oracle
最新论坛
中国LINUX论坛—Oracle for linux 专版
http://www.linuxforum.net/forum/postlist.php?Cat=&Board=oracle
中国LINUX论坛—Oracle for linux 专版
广东早安Oracle论坛
http://www.strongsun.gzidc.com/
LinuxAid 技术支持论坛—数据库应用
http://www.linuxaid.com.cn/forum/boardlist.jsp?m=0&i=20
LinuxAid 技术支持论坛—数据库应用
中国LINUX论坛—数据库
http://www.linuxforum.net/forum/postlist.php?Cat=&Board=db
中国LINUX论坛—数据库
企业管理论坛—Oracle
http://www.9053.net/formu/flist.asp?cat_ID=21
ORACLE 系统专用论坛-中国ERP专家论坛
http://www.erper.com/bbs/forum.asp?Forum_ID=3
腾讯社区:数据库
http://bbs.tencent.com/cgi-bin/bbs/bbs_show_title?groupid=102:10055&tbegnum=0&club=3&st=0&sc=&sort=0&8884
腾讯社区:数据库
甲骨文 —oracle.ok100.net
http://oracle.ok100.net/showBBS.php?BBS_id=oracle
... ...
编程艺苑→数据库
http://www3.ccw.com.cn/club/bbs/list.asp?boardid=10&v=bbs
... ...
西陆家园Oracle讨论区
http://oracleocp.xilubbs.com/
LodeSoft 软件自由论坛
http://softart.lodesoft.com/form/thread.php3?bid=9961273
... ...
圣伟思Oracle技术支持论坛
http://www.whservice.com/whservice/bbs/index.asp
smiling电子小组—Oracle
http://www.smiling.com.cn/group/posts/index_bbs.ecgi?group_id=11046
smiling电子小组—Oracle
google搜索结果
http://www.google.com/search?hl=zh-CN&inlang=zh-CN&ie=GB2312&q=oracle&btnG=Google%CB%D1%CB%F7&lr=lang_zh-CN
... ...
coolunix搜索结果
http://www.coolunix.com/search.cgi?keyword=oracle
... ...
Oracle爱好者之家论坛
http://www.oraclefan.net/ubbs547/Ultimate.cgi?action=intro&BypassCookie=true
Oracle爱好者之家论坛
中国Oracle用户老论坛
http://www.soufun.com/include/visiter/bbs/listpost.asp
... ...
Oracle 資料庫問題討論區 (Oracle)
http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=Oracle
在台湾,奇摩
資料庫疑難雜症來這裡 (database)
http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=database
在台湾,奇摩
Oracle SQL & Developer 2000 討論區
http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=012000030312463768662
在台湾,PC Home Online网路家庭
Oracle資料庫討論區
http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617
在台湾,PC Home Online网路家庭
Oracle資料庫討論區
http://cgi.todo.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617
在台湾
港台站点
名称
地址
介绍
Oracle台湾公司
http://www.oracle.com.tw/
在台湾
Oracle DB技術論壇
http://www.oracledb.com.tw/
在台湾
Oracle精诚*甲骨文中文站
http://oracle.sysware.com.tw/
在台湾
外国ORACLE站点
名称
地址
介绍
Oracle官方站点
http://www.oracle.com/
Oracle的大本营
otn.oracle.com
http://otn.oracle.com/
metalink.oracle.com
http://metalink.oracle.com/
Ask Tom Home
http://asktom.oracle.com/
asktom
Oracle Documentation
http://www.oradoc.com/index.html
Oracle Documentation
orafaq
http://www.orafaq.org/faq2.htm
非常不错的Oracle论坛,分类很细。
Oracle FAQ
http://www.bf.rmit.edu.au/~orafaq
Oracle数据库常见问题解答。
Oracle Faq, Scripts, Articles and Resources DBAsupport.com
http://www.dbasupport.com/
介绍
delante Ltd - Oracle (Database Administration) DBA 's a speciality
http://www.think-forward.com/
OCP online test
http://networkessentials.com/certified/ocp/index.htm
OCP online test
ixora
http://www.ixora.com.au/
advanced performance tuning
The Pipelines -- Information portal for Oracle, DB2, SQL Server.
http://www.revealnet.com/
Osborne
http://www.osborne.com/
Find all the right computer books and learning tools at Osborne McGraw-Hill
DBA-village
http://www.dba-village.com/
DBA-village
OraPerf.com
http://www.oraperf.com/
JL Computer Consultancy
http://www.jlcomp.demon.co.uk/
An expert view on the Oracle (tm) database engine
Oracle Server on Linux Installation
http://jordan.fortwayne.com/oracle/
介绍
orafans
http://www.orafans.com/
介绍
Oracle Magazine
http://www.oramag.com/
一份关于Oracle的月刊。在它的站点上你可以看到一些有深度的文章,也可以看到一些技巧和代码。
Oracle Professional Home
http://www.oracleprofessionalnewsletter.com/
介绍
oracle-home
http://www.oracle-home.com/
The home of Oracle Database information. Books, reviews, Free Oracle Software Downloads and resources on Oracle Database development
oreview
http://www.oreview.com/
介绍
Oracle Technology Professionals
http://www.oranet.com/
Oracle Technology Professionals
oraworld
http://www.oraworld.com/
介绍
oracle-users
http://www.oracle-users.com/
介绍
oracleguru
http://www.oracleguru.com/
介绍
Oraclenotes.com
http://www.oraclenotes.com/
A community for the aspiring Oracle Certified Professional。
Cinema SQL
http://users.neca.com/ltruett/sql.html
SQL Reference and Example Site * featuring * Cinema SQL。
ORACLE软件下载站点
名称
地址
介绍
Oracle公司
http://technet.oracle.com/
介绍
wormwang 新丝(思)路
http://freesoft.online.sh.cn/
这有很多自由软件
西安交通大学思源FTP服务器
ftp://ftp.xjtu.edu.cn/soft/DataBase/
介绍
ftp://oracle-ftp.oracle.com/
ftp://oracle-ftp.oracle.com/
介绍
ftp://166.111.168.13/
ftp://166.111.168.13/
介绍
ORACLE第三方工具站点
名称
地址
介绍
Self Test Software
http://www.selftestsoftware.com/
介绍
Quest Sodtware
http://www.quest.com/
介绍
www.cramsession.com
http://www.cramsession.com/
介绍
其他
名称
地址
介绍
广东早安计算机系统有限公司
http://www.strongsun.com/
ORACLE 华南区总代理
晓通数据库
http://www.xiaotong-db.com.cn/
晓通数据库的工作重点主要放在数据库技术、面向对象的开发技术、以及应用系统的设计技术的研究和应用上。
北京华创
http://www.huachuang.com.cn/index.html
介绍
华迪计算机有限公司
http://www.huadi.com.cn/
信息化应用的系统集成商和服务商,ORACLE的双全牌代理。
佳都国际Oracle认证培训
http://www.pci.com.cn/pci-oracle.htm
介绍
超越认证资讯中心
http://www.transcendinfo.com/
介绍
宏贝思
http://www.macro-base.com/
介绍
常通多维
http://www.ctdw.com.cn/
介绍
北京宇思联成软件技术公司
http://www.youthsoft.com.cn/
介绍
计算机世界网
http://www.ccw.com.cn/
包含:《计算机世界》、《网络世界》、《微电脑世界》、《IT经理世界》、《家用电脑世界》、《聚焦华东》
数据备份专家
http://icesoft.yeah.net/
齐物轩*OCP认证资料网
http://ocp21.myrice.com/
大专院校BBS
名称
BBS地址
数据库讨论版地址
北京大学未名站
http://bbs.pku.edu.cn/
http://bbs.pku.edu.cn/cgi-bin/bbstop?board=Database
清华水木清华
http://a
http://a
复旦大学日月光华站
http://bbs.fudan.edu.cn/
http://bbs.fudan.edu.cn/cgi-bin/bbs/bbsdoc?board=Database
电子科技大学一网情深
http://bbs.uestc.edu.cn/
http://bbs.uestc.edu.cn/cgi-bin//bbsdoc?board=Database
上海交通大学饮水思源站
http://bbs.sjtu.edu.cn/
http://bbs.sjtu.edu.cn/cgi-bin/bbsdoc?board=database
西安交通大学冰马佣站
http://bbs.xanet.edu.cn/
http://bbs.xanet.edu.cn/bbsdoc?board=database
哈工大紫丁香
http://bbs.hit.edu.cn/
http://bbs.hit.edu.cn/cgi-bin/bbs/bbsdoc?Database
华南理工大学木棉站
http://bbs.cnkapok.com/
http://bbs.cnkapok.com/cgi-bin/bbsdoc?NOracle
浙江大学西子浣纱城
http://bbs.zju.edu.cn/
http://bbs.zju.edu.cn/cgi-bin/bbsdoc?board=DataBase


内容列表
1 ? 一些有创意的SQL语句
 
2 ? Microsoft SQL Server 2005 Produc...
 
3 ? sql server 中【农历】计算方法
 
4 ? SQL查询语句精华使用简要
 
5 ? MS SQL 2005 安全设置
 
6 ? SQL Server 2000 (SP4)笔记整理(...
 
7 ? SQL Server 2000 (SP4)笔记整理(...
 
8 ? SQL Server 2000 (SP4)笔记整理(...
 
9 ? 网管必知 了解二十个最危险的安全漏...
 
10 ? 100个ORACLE相关的网址大全
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fredlau/article/details/1936026

智能推荐

Kotlin 解压缩_kotlin 对上传的压缩包进行分析-程序员宅基地

文章浏览阅读638次。fun unZip(zipFile: String, context: Context) { var outputStream: OutputStream? = null var inputStream: InputStream? = null try { val zf = ZipFile(zipFile) val entries = zf.entries() while (en..._kotlin 对上传的压缩包进行分析

64K方法数限制解决办法_java函数大于64k编译失败-程序员宅基地

文章浏览阅读1.9k次。随着业务逻辑越来越多,业务模块也越来越大,不可避免会遇到64K方法数的限制。最直观的表现就是编译报错:较早版本的编译系统中,错误内容如下:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536较新版本的编译系统中,错误内容如下:trouble writing outp_java函数大于64k编译失败

案例分享——低压电力线载波通信模组(借助电源线实现远距离数据传输、宽压输入、波特率范围广、应用场景多样化)_电力载波模块csdn-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏10次。物联网领域,有很多数据通信场景,因为原设备整体系统结构、运行环境等方面的限制,需求在不增加通信数据线缆的情况下实现数据的远程传输,因为特殊应用场景下考虑到环境的限制,还不能使用常规的无线通信手段,所以借助电源线缆进行传输的电力线载波技术应运而生,本次博文给大家分享的就是博主完全自主研发的低压电力线载波通信模组。_电力载波模块csdn

密码学基础_密码体制的五个要素-程序员宅基地

文章浏览阅读7.4k次。密码学基本概念 密码学(Cryptology)是结合数学、计算机科学、电子与通信等学科于一体的交叉学科,研究信息系统安全的科学。起源于保密通信技术。具体来讲,研究信息系统安全保密和认证的一门科学。 密码编码学,通过变换消息(对信息编码)使其保密的科学和艺术 密码分析学,在未知密钥的情况下从密文推_密码体制的五个要素

python支持中文路径_基于python 处理中文路径的终极解决方法-程序员宅基地

文章浏览阅读1.9k次。1 、据说python3就没有这个问题了2 、u'字符串' 代表是unicode格式的数据,路径最好写成这个格式,别直接跟字符串'字符串'这类数据相加,相加之后type就是str,这样就会存在解码失误的问题。别直接跟字符串'字符串'这类数据相加别直接跟字符串'字符串'这类数据相加别直接跟字符串'字符串'这类数据相加unicode类型别直接跟字符串'字符串'这类数据相加说四遍3 、有些读取的方式偏偏..._python 路径 中文

阿里云 B 站直播首秀,用 Serverless 搭个游戏机?-程序员宅基地

文章浏览阅读107次。最近,阿云 B 站没声音,是在憋大招!8月5日周四 19:00 是阿里云的直播首秀,给大家请来了 Forrester 评分世界第一的 Serverless 团队产品经理江昱,给大家在线...._阿里云直播b站

随便推点

AS 3.1.3连续依赖多个Module,导致访问不到Module中的类_为什么as在一个包下建了多个module,缺无法打开了-程序员宅基地

文章浏览阅读1.1k次。我好苦啊,半夜还在打代码。还出bug,狗日的。问题是这样的:我在新建的项目里,建了两个Module: fiora-ec和fiora-core。项目的依赖顺序是这样的,App依赖fiora-ec,fiora-ec又依赖于fiora-core,因为这种依赖关系,所有可以在app和fiora-ec中删除一些不必要的引入,比如这个玩意儿:com.android.support:appcompat-v7:..._为什么as在一个包下建了多个module,缺无法打开了

Magento 常用插件二-程序员宅基地

文章浏览阅读1.4k次。1. SMTP 插件 URL:http://www.magentocommerce.com/magento-connect/TurboSMTP/extension/4415/aschroder_turbosmtp KEY:magento-community/Aschroder_TurboSmtp 2. Email Template Adapter..._magento extension pour ricardo.ch

【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的资源(六)-程序员宅基地

文章浏览阅读161次。声明:本文为原创作品,版权归akuei2及黑金动力社区共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 2.5 低级建模的资源 低级建模有讲求资源的分配,目的是使用“图形”来提高建模的解读性。 图上是低级建模最基本的建模框图,估计大家在实验一和实验二已经眼熟过。功能模块(低级功能模块)是一个水平的长方形,而控制模块(低级控制模块)是矩形。组..._cyclone ep2c8q208c黑金开发板

R语言实用案例分析-1_r语言案例分析-程序员宅基地

文章浏览阅读2.2w次,点赞10次,收藏63次。在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等。R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例。1. 背景最近西安交大大数据专业二班,开设了Java和大数据技术课程,班级人数共100人。2. 需求通过R语言完成该100位同学学号的生成,同时使用R语言模拟生成Java和大数据技术成绩,成绩满分为100,需要满足正_r语言案例分析

Java知识体系总结(2024版),这一次带你搞懂Spring代理创建过程-程序员宅基地

文章浏览阅读639次,点赞11次,收藏26次。虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。一个人可以走的很快,但一群人才能走的更远。

车辆动力学及在Unity、UE4中的实现_unity 车辆动力学模型-程序员宅基地

文章浏览阅读3.9k次,点赞9次,收藏53次。受力分析直线行驶时的车轮受力如下:水平方向上,所受合力为:F=Ft+Fw+FfF=F_t+F_w+F_fF=Ft​+Fw​+Ff​其中,FtF_tFt​为牵引力,FwF_wFw​为空气阻力,FfF_fFf​为滚动阻力,下面我们将逐个介绍。驱动力先来说扭矩,扭矩是使物体发生旋转的一个特殊力矩,等于力和力臂的乘积,单位为N∙mN∙mN∙m:设驱动轴的扭矩为TtT_tTt​,车轮半径为rrr,那么牵引力:Ft=Tt⁄rF_t=T_t⁄rFt​=Tt​⁄r如何求得驱动轴扭矩TtT_tTt​呢?_unity 车辆动力学模型

推荐文章

热门文章

相关标签