行列互转

create   table  test(id  int ,name  varchar ( 20 ),quarter  int ,profile  int insert   into  test  values ( 1 , ' a ' , 1 , 1000 )insert   into  test  values ( 1 , ' a ' , 2 , 2000 )insert   into  test  values ( 1 , ' a ' , 3 , 4000 )insert   into  test  values ( 1 , ' a ' , 4 , 5000 )insert   into  test  values ( 2 , ' b ' , 1 , 3000 )insert   into  test  values ( 2 , ' b ' , 2 , 3500 )insert   into  test  values ( 2 , ' b ' , 3 , 4200 )insert   into  test  values ( 2 , ' b ' , 4 , 5500 )select   *   from  test-- 行转列select  id,name,[ 1 ]   as  "一季度",[ 2 ]   as  "二季度",[ 3 ]   as  "三季度",[ 4 ]   as  "四季度",[ 5 ]   as  " 5 "fromtest
pivot
(
sum (profile)for  quarter  in( [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] )
)
as  pvt

create   table  test2(id  int ,name  varchar ( 20 ), Q1  int , Q2  int , Q3  int , Q4  int )insert   into  test2  values ( 1 , ' a ' , 1000 , 2000 , 4000 , 5000 )insert   into  test2  values ( 2 , ' b ' , 3000 , 3500 , 4200 , 5500 )select   *   from  test2-- 列转行select  id,name,quarter,profilefromtest2
unpivot
(
profile
for  quarter  in( [ Q1 ] , [ Q2 ] , [ Q3 ] , [ Q4 ] )
as  unpvt

 

sql替换字符串 substring replace

-- 例子1:update  tbPersonalInfo  set  TrueName  =   replace (TrueName, substring (TrueName, 2 , 4 ), ' ** '  where  ID  =   1
-- 例子2:update  tbPersonalInfo  set  Mobile  =   replace (Mobile, substring (Mobile, 4 , 11 ), ' ******** '  where  ID  =   1
-- 例子3:update  tbPersonalInfo  set  Email  =   replace (Email, ' chinamobile ' , ' ****** '  where  ID  =   1  

 

SQL查询一个表内相同纪录 having

如果一个ID可以区分的话,可以这么写

select   *   from  表  where  ID  in  (select  ID  from  表  group   by  ID  having   sum ( 1 ) > 1 )

如果几个ID才能区分的话,可以这么写

select   *   from  表  where  ID1 + ID2 + ID3  in( select  ID1 + ID2 + ID3  from  表  group   by  ID1,ID2,ID3  having   sum ( 1 ) > 1 )

其他回答:数据表是zy_bho,想找出ZYH字段名相同的记录

-- 方法1:    SELECT    * FROM   zy_bho  a   WHERE    EXISTS  
  (
 SELECT    1    FROM   zy_bho   WHERE    [ PK ]    <>   a. [ PK ]    AND   ZYH   =   a.ZYH) 
   
-- 方法2:select   a. *    from   zy_bho  a   join   zy_bho  b 
      
 on   (a. [ pk ] <> b. [ pk ]    and   a.zyh = b.zyh) 
   
-- 方法3:select    *    from   zy_bbo   where   zyh   in  
(
 select   zyh   from   zy_bbo   group    by   zyh   having    count (zyh) > 1 -- 其中pk是主键或是 unique的字段。 


把多行SQL数据变成一条多列数据,即新增列

SelectDeptName = O.OUName,' 9G ' = Sum ( Case   When  PersonalGrade = 9   Then   1   Else   0   End ),' 8G ' = Sum ( Case   When  PersonalGrade = 8   Then   1   Else   0   End ),' 7G4 ' = Sum ( Case   When  PersonalGrade = 7   AND  JobGrade  = 4   Then   1   Else   0   End ),' 7G3 ' = Sum ( Case   When  PersonalGrade = 7   AND  JobGrade  = 3   Then   1   Else   0   End ),' 6G ' = Sum ( Case   When  PersonalGrade = 6   Then   1   Else   0   End ),' 5G3 ' = Sum ( Case   When  PersonalGrade = 5   AND  JobGrade  = 3   Then   1   Else   0   End ),' 5G2 ' = Sum ( Case   When  PersonalGrade = 5   AND  JobGrade  = 2   Then   1   Else   0   End ),' 4G ' = Sum ( Case   When  PersonalGrade = 4   Then   1   Else   0   End ),' 3G2 ' = Sum ( Case   When  PersonalGrade = 3   AND  JobGrade  = 2   Then   1   Else   0   End ),' 3G1 ' = Sum ( Case   When  PersonalGrade = 3   AND  JobGrade  = 1   Then   1   Else   0   End ),' 2G ' = Sum ( Case   When  PersonalGrade = 2   Then   1   Else   0   End ),' 1G ' = Sum ( Case   When  PersonalGrade = 1   Then   1   Else   0   End ),-- ' 未定级'=Sum(Case When PersonalGrade=NULL Then 1 Else 0 End) 

 

表复制

insert   into  PhoneChange_Num ( [ IMSI ] ,Num)SELECT   [ IMSI ]      , count ( [ IMEI ]  as  num
  
 FROM   [ Test ] . [ dbo ] . [ PhoneChange ]   group   by   [ IMSI ]   order   by  num  desc  

语法1:Insert INTO table(field1,field2,...) values(value1,value2,...)

语法2:Insert into Table2(field1,field2,...) select value1,value2,... from Table1(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。)

语法3:SELECT vale1, value2 into Table2 from Table1(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。)

语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。

 

利用带关联子查询Update语句更新数据

-- 方法1:Update  Table1  set  c  =  ( select  c  from  Table2  where  a  =  Table1.a)  where  c  is   null  -- 方法2:update   Aset   newqiantity = B.qiantityfrom   A,Bwhere   A.bnum = B.bnum -- 方法3:update    ( select  A.bnum ,A.newqiantity,B.qiantity  from  A  left   join  B  on  A.bnum = B.bnum)  AS  Cset  C.newqiantity  =  C.qiantitywhere  C.bnum  = XX 

 

连接远程服务器

-- 方法1:select   *    from   openrowset ( ' SQLOLEDB ' , ' server=192.168.0.67;uid=sa;pwd=password ' , ' SELECT * FROM BCM2.dbo.tbAppl ' )-- 方法2:select   *    from   openrowset ( ' SQLOLEDB ' , ' 192.168.0.67 ' ; ' sa ' ; ' password ' , ' SELECT * FROM BCM2.dbo.tbAppl ' )  

 



Date 和 Time 样式


 


不带世纪数位 (yy) (1)

带世纪数位 (yyyy)

标准

输入/输出 (3)

-

0 或 100 (1,2)

默 认

mon dd yyyy hh:miAM(或 PM)

1

101

美 国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英 国/法国

dd/mm/yyyy

4

104

德 国

dd.mm.yy

5

105

意 大利

dd-mm-yy

6

106(1)

-

dd mon yy

7

107(1)

-

mon dd, yy

8

108

-

hh:mi:ss

-

9 或 109 (1,2)

默 认设置 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美 国

mm-dd-yy

11

111

日 本

yy/mm/dd

12

112

ISO

yymmdd

yyyymmdd

-

13 或 113 (1,2)

欧 洲默认设置 + 毫秒

dd mon yyyy hh:mi:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20 或 120 (2)

ODBC 规范

yyyy-mm-dd hh:mi:ss(24h)

-

21 或 121 (2)

ODBC 规范(带毫秒)

yyyy-mm-dd hh:mi:ss.mmm(24h)

-

126 (4)

ISO8601

yyyy- mm-ddThh:mi:ss.mmm(无空格)

-

127(6, 7)

带时区 Z 的 ISO8601。

yyyy-mm-ddThh:mi:ss.mmmZ

(无 空格)

-

130 (1,2)

回历 (5)

dd mon yyyy hh:mi:ss:mmmAM

-

131 (2)

回历 (5)

dd/mm/yy hh:mi:ss:mmmAM


-- 语句及查询结果:SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  0 ):  05   16   2006   10 :57AMSELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  1 ):  05 / 16 / 06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  2 ):  06.05 . 16
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  3 ):  16 / 05 / 06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  4 ):  16.05 . 06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  5 ):  16 - 05 - 06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  6 ):  16   05   06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  7 ):  05   16  06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  8 ):  10 : 57 : 46
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  9 ):  05   16   2006   10 : 57 : 46 :827AMSELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  10 ):  05 - 16 - 06
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  11 ):  06 / 05 / 16
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  12 ):  060516
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  13 ):  16   05   2006   10 : 57 : 46 : 937
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  14 ):  10 : 57 : 46 : 967
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  20 ):  2006 - 05 - 16   10 : 57 : 47
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  21 ):  2006 - 05 - 16   10 : 57 : 47.157
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  22 ):  05 / 16 / 06   10 : 57 : 47  AMSELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  23 ):  2006 - 05 - 16
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  24 ):  10 : 57 : 47
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  25 ):  2006 - 05 - 16   10 : 57 : 47.250
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  100 ):  05   16   2006   10 :57AMSELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  101 ):  05 / 16 / 2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  102 ):  2006.05 . 16
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  103 ):  16 / 05 / 2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  104 ):  16.05 . 2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  105 ):  16 - 05 - 2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  106 ):  16   05   2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  107 ):  05   16  2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  108 ):  10 : 57 : 49
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  109 ):  05   16   2006   10 : 57 : 49 :437AMSELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  110 ):  05 - 16 - 2006
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  111 ):  2006 / 05 / 16
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  112 ):  20060516
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  113 ):  16   05   2006   10 : 57 : 49 : 513
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  114 ):  10 : 57 : 49 : 547
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  120 ):  2006 - 05 - 16   10 : 57 : 49
SELECT   CONVERT ( varchar ( 100 ),  GETDATE (),  121 ):  2006

对上面进行动态生成字符串:

declare   @sql1   nvarchar ( 200 ), @sql2   nvarchar ( 200 )declare   @count   nvarchar ( 100 );set   @sql1   =   ' SELECT CONVERT(varchar(100), GETDATE(), 0) '
set   @sql2   =   ' SELECT @count = CONVERT(varchar(100), GETDATE(), 0) '
exec  sp_executesql   @sql2 ,N ' @count nvarchar(50) out ' , @count  outprint   @sql1   + '  ' +   @count

 

-- SQL Server 仅保证往返转换(即从原始数据类型进行转换后又返回原始数据类型的转换)在各版本间产生相同值。DECLARE   @myval   decimal  ( 5  2 )SET   @myval   =   193.57
SELECT   CAST ( CAST ( @myval   AS   varbinary ( 20 ))  AS   decimal ( 10 , 5 ))--  Or, using CONVERTSELECT   CONVERT ( decimal ( 10 , 5 ),  CONVERT ( varbinary ( 20 ),  @myval ))-- 输出193.57000-- 输出193.57000

 

-- bigint数据类型的字段截取(其它类型也一样)select   substring ( CONVERT ( varchar ( 15 ),字段名), 11 , 9  from  表名select   substring ( cast (字段名  as   varchar ( 50 ), 6 , 9 ))  from  表名

 

-- SQL中的相除SELECT   CASE   WHEN   ISNULL (A + B, 0 ) <> 0   THEN  LTRIM ( CONVERT ( DEC ( 18 , 2 ),A * 100.0 / (A + B))) + ' % '    ELSE   ''   END   AS   ' 百分数 '  FROM  TB 

 

-- 百分比的不同格式select  LTRIM ( CONVERT ( DEC ( 18 , 2 ), 42 * 100.0 / 96 )) + ' % '   AS   ' 百分数string '  , -- DEC=decimalCONVERT ( decimal ( 10 , 2 ), 42 * 100.0 / 96  AS   ' 百分数dec '  -- 100 与 100.0是不一样的CONVERT ( decimal ( 10 , 2 ), 42 * 100 / 96  AS   ' 没有保留到小数点 '
-- from Tborder   by  百分数dec  desc
-- 43.75%    43.75    43.00 -- 方法二:Select  ( Convert ( varchar ( 50 ), Round ( 42 * 100.0 / 96 , 3 )) + ' % '  as  百分比  -- from A-- 43.750000%

 

四舍五入

/* ROUND ( numeric_expression , length [ ,function ] )
function 必须为 tinyint、smallint  或 int。
如果省略 function 或其值为 0(默认值),则将舍入 numeric_expression。
如果指定了0以外的值,则将截断 numeric_expression。
 */
SELECT   ROUND ( 150.45648  2 ); -- 保留小数点后两位,需要四舍五入SELECT   ROUND ( 150.45648  2  0 ); -- 保留小数点后两位,0为默认值,表示进行四舍五入SELECT   ROUND ( 150.45648  2  1 ); -- 保留小数点后两位,不需要四舍五入,这里除0以外都是有同样的效果SELECT   ROUND ( 150.45648  2  2 ); -- 保留小数点后两位,不需要四舍五入,这里除0以外都是有同样的效果-- 150.46000-- 150.45000-- 150.45000-- 150.45000

 

对字段出现NULL值的处理

-- 判断某些字段是否为空-- caseselect   case   when   ' 字段名 '   is   null   then   ' /N '   else   convert ( varchar ( 20 ), ' 字段名 '  end   as   ' NewName '
select   case   when   null   is   null   then   ' /N '   else   convert ( varchar ( 20 ), null  end   as   ' NewName '
-- SQL Server 2005:coalesceselect   coalesce ( ' 字符串类型字段 ' , ' /N '  as   ' NewName '
select   coalesce ( convert ( varchar ( 20 ), ' 非字符串类型字段 ' ), ' /N '  as   ' NewName '
select   coalesce ( convert ( varchar ( 20 ), null ), ' /N '  as   ' NewName '
-- coalesce,返回其参数中的第一个非空表达式select   Coalesce ( null , null , 1 , 2 , null ) union
select   Coalesce ( null , 11 , 12 , 13 , null ) union
select   Coalesce ( 111 , 112 , 113 , 114 , null )

 

count的几种情况

-- 第一种select   count ( *  from  tablename-- 第二种select   count (ID)  from  tablename-- 第三种,1换成其它值也是可以的select   count ( 1  from  tablename/*--第四种,这个不存在性能问题
idint 表ID(如果 indid = 0 或255)。否则为索引所属表的ID
Indid smallint 索引ID:
0=表
1=聚簇索引
>1=非聚簇索引
255=具有text或image数据的表条目。
rows int 基于indid=0 和 indid=1地数据级行数,该值对于indid>1重复。如果indid=255,rows设置为0。
当表没有聚簇索引时,Indid = 0 否则为 1。 */

select  rows,indid  from  sysindexes  where  id  =   object_id ( ' tablename '  and  indid  in  ( 0 , 1 

 

 

Union all

-- 把两个相同结构的表union后插入到一个新表中select   *  into  table_nowfrom  table_1union   all   select   *   from  table_2-- Truncate table table_now

 

查看数据库缓存的SQL

-- 适用MSSQL2000、MSSQL2005use  masterdeclare   @dbid   int
Select   @dbid   =  dbid  from  sysdatabases  where  name  =   ' Test ' -- 修改成数据库的名称selectdbid,UseCounts ,RefCounts,CacheObjtype,ObjType,DB_Name (dbid)  as  DatabaseName,SQLfrom  syscacheobjectswhere  dbid = @dbid
order   by  dbid,useCounts  desc ,objtype

 

删除计划缓存

-- 删除整个数据库的计划缓存DBCC  FREEPROCCACHE-- 删除某个数据库的计划缓存USE  masterDECLARE   @dbid   INT
SELECT   @dbid = dbid  FROM  sysdatabases  WHERE  NAME  =   ' 表名 '
DBCC  FLUSHPROCINDB ( @dbid )

 

导出时加入特殊字符

情况一:全部字段都需要加字符,在这里设置【文本限定符】就可以了。

简单但有用的SQL脚本_Mobile

 

情况二:

-- 某些特殊的字段需要加单引号(或者其它符号) SELECT       [ ID ]      , '''' + convert ( varchar ( 25 ), [ ts ] , 121 ) + ''''   as   [ ts ]      , '''' + convert ( varchar ( 25 ), [ otherParty ] , 121 ) + ''''   as   [ otherParty ]      , '''' + convert ( varchar ( 25 ), [ StartTime ] , 121 ) + ''''   as   [ StartTime ]      , [ CcCause ]      , [ RrCause ]   FROM   [  ]

效果:74983006,'2010-03-09 23:59:10.000'

 

newid()的妙用

-- 生成测试数据SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
SET  ANSI_PADDING  ON
GO
CREATE   TABLE   [ dbo ] . [ test ] (
    
 [ name ]   [ varchar ] ( 20  NULL ,
    
 [ quarter ]   [ int ]   NULL ,
    
 [ profile ]   [ int ]   NULL ,
    
 [ dates ]   [ smallint ]   NULL ,
    
 [ ID ]   [ int ]   IDENTITY ( 1 , 1  NOT   NULL ,
 
 CONSTRAINT   [ PK_test ]   PRIMARY   KEY   CLUSTERED  
(
    
 [ ID ]   ASC) WITH  (PAD_INDEX   =   OFF , STATISTICS_NORECOMPUTE   =   OFF , IGNORE_DUP_KEY  =   OFF , ALLOW_ROW_LOCKS   =   ON , ALLOW_PAGE_LOCKS   =   ON  ON   [ PRIMARY ] ON   [ PRIMARY ]
GO
SET  ANSI_PADDING  OFF
GO
SET   IDENTITY_INSERT   [ dbo ] . [ test ]   ON
INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' a '  1  1000  421  1 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' Aa '  2  2000  421  2 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' AA '  3  4000  421  3 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' a '  4  5000  421  4 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  1  3000  421  5 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  2  3500  421  6 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  3  4200  421  7 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  4  5500  421  8 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' a '  1  1000  421  9 )SET   IDENTITY_INSERT   [ dbo ] . [ test ]   OFF

 

 --从数据库中随机取出N条记录的方法:newid()

select   top   5   *   from  testselect   top   5   *   from  test  order   by   newid ()

简单但有用的SQL脚本_数据_02

 

(图:效果图) 

 

查询时区分大小写

-- 生成测试数据SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
SET  ANSI_PADDING  ON
GO
CREATE   TABLE   [ dbo ] . [ test ] (
    
 [ name ]   [ varchar ] ( 20  NULL ,
    
 [ quarter ]   [ int ]   NULL ,
    
 [ profile ]   [ int ]   NULL ,
    
 [ dates ]   [ smallint ]   NULL ,
    
 [ ID ]   [ int ]   IDENTITY ( 1 , 1  NOT   NULL ,
 
 CONSTRAINT   [ PK_test ]   PRIMARY   KEY   CLUSTERED  
(
    
 [ ID ]   ASC) WITH  (PAD_INDEX   =   OFF , STATISTICS_NORECOMPUTE   =   OFF , IGNORE_DUP_KEY  =   OFF , ALLOW_ROW_LOCKS   =   ON , ALLOW_PAGE_LOCKS   =   ON  ON   [ PRIMARY ] ON   [ PRIMARY ]
GO
SET  ANSI_PADDING  OFF
GO
SET   IDENTITY_INSERT   [ dbo ] . [ test ]   ON
INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' a '  1  1000  421  1 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' Aa '  2  2000  421  2 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' AA '  3  4000  421  3 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' A '  4  5000  421  4 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  1  3000  421  5 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  2  3500  421  6 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  3  4200  421  7 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' b '  4  5500  421  8 )INSERT   [ dbo ] . [ test ]  ( [ name ]  [ quarter ]  [ profile ]  [ dates ]  [ ID ]  VALUES  (N ' A '  1  1000  421  9 )SET   IDENTITY_INSERT   [ dbo ] . [ test ]   OFF

  

-- sql server 查询区分大小写 collate Chinese_PRC_CS_AS_WSselect   *   from  test  where   [ name ] = ' A '  collate Chinese_PRC_CS_AIselect   *   from  test  where   ascii (name)  =   ascii ( ' A ' )

简单但有用的SQL脚本_字段_03

 

(图:效果图)  

 

SQL换行

 

/*SQL的换行
制表符 CHAR(9)
换行符 CHAR(10)
回车 CHAR(13)*/

PRINT   ' Test ' + CHAR ( 13 ) + ' Name '
PRINT   ' Test ' + CHAR ( 10 ) + ' Age '
PRINT   ' Test ' + CHAR ( 9 ) + ' Tel '
-- 以文本格式显示结果SELECT   ' AAA ' +   CHAR ( 10 ) + ' BBB ' -- AAA  BBBSELECT   ' AAA ' +   CHAR ( 13 ) + ' BBB ' -- AAA  BBBSELECT   ' AAA '   +   CHAR ( 10  +   CHAR ( 13  +   ' BBB ' -- AAA  BBB

 

TRUNCATE TABLE [Table Name]

下面是对Truncate语句在MSSQLServer2000中用法和原理的说明:

Truncate是SQL中的一个删除数据表内容的语句,用法是:

Truncate table 表名 速度快,而且效率高,因为:
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
TRUNCATE TABLE 不能用于参与了索引视图的表。 

 

其它

-- 查看内存状态dbcc  memorystatus-- 查看哪个引起的阻塞,blk EXEC  sp_who active -- 查看锁住了那个资源id,objidEXEC  sp_lock -- 当前查询分析器SPID-- 查询分析器的状态栏中可以看到-- 比如sa(57),这就表示当前查询分析器SPID为57,这样在使用profile的时候就可以指定当前窗体进行监控

 

-- 获取脚本的执行时间declare   @timediff   datetime  select   @timediff = getdate () select   *   from  tablenameprint   ' 1耗时: ' +   convert ( varchar ( 10 ), datediff (ms, @timediff , getdate ()))

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6