代码改变世界

SQL常用代码收集..

2012-09-25 17:38  露珠的微笑  阅读(309)  评论(0)    收藏  举报

一、

1、is null 而不是=null

用=null进行判断不报错,运行有时符合编写者的意图,有时不符合编写者的意图

2、exec和exec sp_executesql(动态执行sql语句)

3、N'string'  表示string是个Unicode字符串

3、SET NOCOUNT { ON | OFF }:当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数),但仍然要更新 @@ROWCOUNT 函数。

                 当 SET NOCOUNT 为 OFF 时,返回计数

    结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的

  其中:@@ROWCOUNT是返回受上一语句影响的行数,包括找到记录的数目、删除的行数、更新的记录数等,不要认为只是返回查找的记录数目,而且@@ROWCOUNT要紧跟需要判断语  句,否则@@ROWCOUNT将返回0。

4、自动编号:identity(1,1)

 

5、获取插入记录后的ID(自增):在插入一条记录的后要立即获取所在数据库中ID,而该ID是自增的

①  @@identity

insert into tbldemo values('测试') select @@identity

②SCOPE_IDENTITY:返回为当前会话和当前作用域中的任何表最后生成的标识值

③IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值,它不受作用域和会话的限制,而受限于所指定的表。

6、排序collation

Collation所规定的就是一种字符集的排序规则(选择数据库->右击属性->选项 或者SELECT * FROM   Fn_helpcollations())

select * from temp_table order by txt collate Chinese_prc_stroke_CS_AS_KS_WS--按笔划排序

7、Soundex

SOUNDEX将字符转换成表示其发音的字母与数字的组合,所以用它进行字符串的匹配是基于字符串的读音而不是字符本身

8、UNION和union all

9、设置自增的列可手动输入

set IDENTITY_INSERT 表名 ON

二、SQL的随机

1、返回0到10之间的一个随机数(rand,ceiling,floor,left,right,substring函数)

例如:left(rand()*10,1)    ceiling(rand()*10)

注:CEILING()和FLOOR()这两个函数,前者返回大于等于给定参数的最小整数,后者相反,返回小于等于给定参数的最大整数。比如CEILING(0.3),那么比0.3大的整数就是1,2,3….最小的是1,返回1.  而FLOOR(1.5)呢,对头,返回1.

2、从表中返回随机抽取的数据行NEWID():SELECT top 3 * FROM Retailer order BY newid()

3、TABLESAMPLE() :每次返回的结果数目是不一样的,在给定的参数上下跳动,所以如果表本身的数据量很小的话,比如只有两三百条,使用此命令一行结果也没有返回是很正常的。是SQL SERVER 2005 新增的内容

//出现语法错误时需更改数据库的兼容

EXEC sys.sp_dbcmptlevel
      'survey',
      '90'
SELECT * FROM AllShop TABLESAMPLE(5 ROWS)

三、日期与时间

1、GETDATE()可以方便地获得时间日期

DATEPART()则会返回指定的日期,不是日期格式,而差距,比如指定日期是星期四,SELECT datepart(weekday,getdate())显示5,即第五天
datename:则符合人们的习惯,比如指定日期是星期四,SELECT datename(weekday,getdate())显示的是星期五

SELECT datepart(month,getdate())
SELECT datepart(weekday,getdate())
SELECT datepart(year,getdate())
SELECT datename(month,getdate())--显示月份
SELECT datename(day,getdate())--显示几号
SELECT datename(weekday,getdate())--显示星期

2、返回日期中的时间,或者日期中的日期不带时间

①先把日期转换成字符后操作。对于字符你就可以用LEFT()或者RIGHT()抑或者SUBSTR()来取一个日期数据中的任何部分

②利用函数Convert

select left(convert(VARCHAR(20),getdate()),11)--显示日期
SELECT right(convert(VARCHAR(20),getdate()),7)--显示时间
select convert(DATE,getdate())--显示日期
SELECT convert(time,getdate())--显示时间

 

四、内置变量

1、@@language:当前SQL数据库的语言

SELECT @@language--查询出数据库当前使用语言
set LANGUAGE English --设置数据库语言

五、保存特殊类型

1、str(x):将x转换成串//碰到日期时,无法转换

2、CONVERT()