这个存储过程的作用是自动生成编号,比如我们在数据库中有个**票编号字段,该存储过程可以生成格式为头(自己定义的一个头,比如AA)+日期(形如20070401)+6位递增整数(形如002254),并且每到了新的一年后面的6位整数便会归0重新开始。其中用到了动态执行sql的方法。参数有四个,需要给出表名称,字段名称,头和一个返回值。
=============================================
-- Author:        <vagerent>
--
 Create date: <2006-12-14>
--
 Description:    <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新

归0
>
-- =============================================
Create PROCEDURE [dbo].[mp_GetPKNo]
    
@sTableName varchar(50),
    
@sFieldName varchar(50),--目标字段
    @sHead varchar(50),--前缀,如Head等
    @sPK varchar(50) out --输出

AS
BEGIN
    
declare @dToday datetime,@sToday varchar(10),
        
@sYear varchar(10),@sSubID varchar(20),@sSql nvarchar(1000);--动态sql一定要用

nvarchar!!!
    
    
set @dToday = getdate();
    
set @sToday = Convert(varchar,Year(@dToday))
        
+SubString(Convert(varchar,Month(@dToday)+100),2,2)
        
+SubString(Convert(varchar,Day(@dToday)+100),2,2);
    
--select @sToday--形如20060512
    set @sYear=Convert(varchar(10),Year(getdate()))
    
--select @sYear--形如2006
    
    
declare @sHead1 varchar(30),@iHeadLength int;
    
set @sHead1=@sHead+@sYear;--形如HEAD2006
    --select @sHead1;--形如HEAD2006
    set @iHeadLength=Len(@sHead1);
    
--select @iHeadLength;--形如6
    set @sSql = N'select @sSubID=Max(SubString('
        
+@sFieldName+','+Convert(varchar(10),@iHeadLength+5)+',6)) from '
        
+@sTableName+' where SubString('+@sFieldName+',1,'
        
+Convert(varchar(10),@iHeadLength)+')='''+@sHead1+'''';
    
--select @sSql;--形如select..
    exec sp_executesql @sSql,N'@sSubID varchar(20) output',@sSubID output;

    
if ((@sSubID=''or (@sSubID is null))
        
set @sSubID='000001'
    
else
    
begin
        
declare @iSubID int;
        
set @iSubID=Convert(int,@sSubID)+1000001;
        
set @sSubID=SubString(Convert(varchar,@iSubID),2,6)
    
end
    
--select @sSubID;
    set @sPK=@sHead+@sToday+@sSubID;

return
END
--Demo 1: 
use northwind 
go 
set statistics IO on 
go 
select count(*from northwind.dbo.employees 
go 
set statistics IO off 
go 

use northwind 
go 
exec sp_spaceused employees 
go 

--Demo 2: 
set statistics time on 
go 
select count(*from northwind.dbo.employees 
go 
set statistics time off 
go 

--Demo 3: 
set showplan_text on 
go 
select count(*from northwind.dbo.employees 
go 
set showplan_text off 
go 

--Demo 4: 
set nocount on 
go 
select count(*from northwind.dbo.employees 
go 
set nocount off 
go 


--Demo 5查询单条sql语句的执行时间: 
declare @start_time datetime 
select @start_time=getdate() 
select * from northwind.dbo.employees 
select '查询语句的执行时间(毫秒)'=datediff(ms,@start_time,getdate()) 

--Demo 6查询成批的sql语句的执行时间: 
create table #save_time(start_time datetime not null
insert #save_time values(getdate()) 
go 
select * from employees 
go 
select * from orders 
go 
select '查询语句的执行时间(毫秒)'=datediff(ms,start_time,getdate()) 
from #save_time 
drop table #save_time 
go 

--Demo 7返回语句的执行计划内容: 
set showplan_all on 
go 
select * from pubs.dbo.authors 
go 
set showplan_all off 
go 

--Demo 8从执行计划判断是否需要优化SQL: 
/*SEEK操作*/ 
set showplan_all on 
go 
select * from pubs.dbo.sales where stor_id>='7131' 
go 
set showplan_all off 
go 
/*SCAN操作*/ 
set showplan_all on 
go 
select * from pubs.dbo.sales where ord_date is not null 
go 
set showplan_all off 
go 

--Demo 9连接查询VS子查询: 
/*子查询*/ 
set statistics io on 
go 
select au_fname,au_lname from pubs.dbo.authors where au_id in 
(
select au_id from pubs.dbo.titleauthor) 
set statistics io off 
go 


/*连接查询*/ 
set statistics io on 
go 
select distinct au_fname,au_lname from pubs.dbo.authors as a inner join 
pubs.dbo.titleauthor 
as t on a.au_id=t.au_id 
go 
set statistics io off 
go 

--Demo 10智能优化: 
select p1.productname from northwind.dbo.products as p1 inner join 
northwind.dbo.products 
as p2 on (p1.unitprice=p2.unitprice) 
where p2.productname like 'Alice%' 
1. 查看数据库的版本     
   
select @@version 
    
   常见的几种SQL SERVER打补丁后的版本号: 
    
    
8.00.194   Microsoft SQL Server 2000  
    
8.00.384   Microsoft SQL Server 2000 SP1  
    
8.00.532   Microsoft SQL Server 2000 SP2  
    
8.00.760   Microsoft SQL Server 2000 SP3  
    
8.00.818   Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031  
    
8.00.2039  Microsoft SQL Server 2000 SP4   
    
2. 查看数据库所在机器操作系统参数     
   
exec master..xp_msver 
    
3. 查看数据库启动的参数         
   sp_configure 
         
4. 查看数据库启动时间         
   
select convert(varchar(30),login_time,120from master..sysprocesses where spid=1 
    
   查看数据库服务器名和实例名 
   
print 'Server Name' + convert(varchar(30),@@SERVERNAME)         
   
print 'Instance' + convert(varchar(30),@@SERVICENAME)       

5. 查看所有数据库名称及大小 
   sp_helpdb 
    
   重命名数据库用的SQL 
   sp_renamedb 
'old_dbname''new_dbname' 
    
6. 查看所有数据库用户登录信息 
   sp_helplogins 
    
   查看所有数据库用户所属的角色信息     
   sp_helpsrvrolemember 
    
   修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 
    
   更改某个数据对象的用户属主 
   sp_changeobjectowner 
[@objectname =] 'object'[@newowner =] 'owner' 
    
   注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 
    
   把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 
    
   查看某数据库下,对象级用户权限 
   sp_helprotect 
    
7. 查看链接服务器         
   sp_helplinkedsrvlogin 
    
   查看远端数据库用户登录信息     
   sp_helpremotelogin 
    
8.查看某数据库下某个数据对象的大小 
   sp_spaceused 
@objname 
   
   还可以用sp_toptables过程看最大的N(默认为50)个表 
   
   查看某数据库下某个数据对象的索引信息 
   sp_helpindex 
@objname 
    
   还可以用SP_NChelpindex过程查看更详细的索引情况 
   SP_NChelpindex 
@objname 
    
   clustered索引是把记录按物理顺序排列的,索引占的空间比较少。  
   对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。 

   查看某数据库下某个数据对象的的约束信息 
   sp_helpconstraint 
@objname 
   
9.查看数据库里所有的存储过程和函数 
   
use @database_name 
   sp_stored_procedures 

   查看存储过程和函数的源代码 
   sp_helptext 
'@procedure_name' 
    
   查看包含某个字符串
@str的数据对象名称 
   
select distinct object_name(id) from syscomments where text like '%@str%' 
   
   创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数 
   
   解密加密过的存储过程和函数可以用sp_decrypt过程 
   
       
10.查看数据库里用户和进程的信息 
   sp_who 

  查看SQL Server数据库里的活动用户和进程的信息 
   sp_who 
'active' 

  查看SQL Server数据库里的锁的情况 
   sp_lock 
    
   进程号1
--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程. 

   spid是进程编号,dbid是数据库编号,objid是数据对象编号 

   查看进程正在执行的SQL语句 
   
dbcc inputbuffer () 
            
  推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句 
   sp_who3 
    
  检查死锁用sp_who_lock过程 
   sp_who_lock     
        
       
11.查看和收缩数据库日志文件的方法 
        
          查看所有数据库日志文件大小           
          
dbcc sqlperf(logspace) 
  
          如果某些日志文件较大,收缩简单恢复模式数据库日志,收缩后
@database_name_log的大小单位为M 
   
backup log @database_name with no_log 
   
dbcc shrinkfile (@database_name_log5

       
12.分析SQL Server SQL 语句的方法: 
        
   
set statistics time {on | off

   
set statistics io {on | off

           图形方式显示查询执行计划 
            
           在查询分析器
->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形 
            
           文本方式显示查询执行计划 

   
set showplan_all {on | off
    
   
set showplan_text { on | off } 

   
set statistics profile { on | off } 
    
  
       
13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法 
   
  先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作 
   
  
alter database [@error_database_name] set single_user 
   
  修复出现不一致错误的表 
   
  
dbcc checktable('@error_table_name',repair_allow_data_loss) 
   
  或者可惜选择修复出现不一致错误的小型数据库名 
   
  
dbcc checkdb('@error_database_name',repair_allow_data_loss) 

  
alter database [@error_database_name] set multi_user 

  CHECKDB 有3个参数: 

  repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误, 
  以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。 
  修复操作可以在用户事务下完成以允许用户回滚所做的更改。 
  如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。 
  如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。 
  修复完成后,请备份数据库。  

  repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。 
  这些修复可以很快完成,并且不会有丢失数据的危险。  

  repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。 
  执行这些修复时不会有丢失数据的危险。  
 MS-SQL数据库开发常用汇总 1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同
3.取回表中字段:
declare @list varchar(1000),@sql nvarchar(1000
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A' 
exec (@sql)
4.查看硬盘分区:
EXEC master..xp_fixeddrives
5.比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
=
(
select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.杀掉所有的事件探察器进程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.记录搜索:
开头到N条记录
Select Top N * From 表
-------------------------------
N到M条记录(要有主索引ID)
Select Top M-* From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到结尾记录
Select Top N * From 表 Order by ID Desc
8.如何修改数据库的名称:
sp_renamedb 
'old_name''new_name' 
9:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
10:获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
11:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
13:查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
14:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名' 
[n].[标题]:
Select * From TableName Order By CustomerName 
[n].[标题]:
快速获取表test的记录总数 : 
select rows from sysindexes where id = object_id('test'and indid in (0,1)
提取数据库内所有表的字段详细说明的SQL语句 :

SELECT 
(
case when a.colorder=1 then d.name else '' end) N'表名'
a.colorder N
'字段序号'
a.name N
'字段名'
(
case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else '' 
end) N'标识'
(
case when (SELECT count(*
FROM sysobjects 
WHERE (name in 
(
SELECT name 
FROM sysindexes 
WHERE (id = a.id) AND (indid in 
(
SELECT indid 
FROM sysindexkeys 
WHERE (id = a.id) AND (colid in 
(
SELECT colid 
FROM syscolumns 
WHERE (id = a.id) AND (name = a.name))))))) AND 
(xtype 
= 'PK'))>0 then '' else '' end) N'主键'
b.name N
'类型'
a.length N
'占用字节数'
COLUMNPROPERTY(a.id,a.name,'PRECISION'as N'长度'
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0as N'小数位数'
(
case when a.isnullable=1 then ''else '' end) N'允许空'
isnull(e.text,'') N'默认值'
isnull(g.[value],''AS N'字段说明' 
FROM syscolumns a 
left join systypes b 
on a.xtype=b.xusertype 
inner join sysobjects d 
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' 
left join syscomments e 
on a.cdefault=e.id 
left join sysproperties g 
on a.id=g.id AND a.colid = g.smallid 
order by object_name(a.id),a.colorder
获取表结构
[把 'sysobjects' 替换 成 'tablename' 即可] 

SELECT CASE IsNull(I.name, ''
When '' Then '' 
Else '*' 
End as IsPK, 
Object_Name(A.id) as t_name, 
A.name 
as c_name, 
IsNull(SubString(M.text1254), ''as pbc_init, 
T.name 
as F_DataType, 
CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), ''
WHEN '' Then Cast(A.prec as varchar
ELSE Cast(A.prec as varchar+ ',' + Cast(A.scale as varchar
END as F_Scale, 
A.isnullable 
as F_isNullAble 
FROM Syscolumns as A 
JOIN Systypes as T 
ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') ) 
LEFT JOIN ( SysIndexes as I 
JOIN Syscolumns as A1 
ON ( I.id = A1.id and A1.id = object_id('sysobjects'and (I.status & 0x800= 0x800 AND A1.colid <= I.keycnt) ) 
ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) ) 
LEFT JOIN SysComments as M 
ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint'= 1 ) 
ORDER BY A.Colid ASC
四种方法取表里n到m条纪录:

1.
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
set rowcount n
select * from 表变量 order by columnname desc
2.
select top n * from (select top m * from tablename order by columnname) a order by columnname desc
3.如果tablename里没有其他identity列,那么:
select identity(int) id0,* into #temp from tablename
取n到m条的语句为:
select * from #temp where id0 >=and id0 <= m
如果你在执行 
select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true


4.如果表里有identity属性,那么简单:
select * from tablename where identitycol between n and m 

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

数据库管理常用SQL

1. 查看数据库的版本 
select @@version 

2. 查看数据库所在机器操作系统参数 
exec master..xp_msver 

3. 查看数据库启动的参数 
sp_configure 

4. 查看数据库启动时间 
select convert(varchar(30),login_time,120from master..sysprocesses where spid=1 

查看数据库服务器名和实例名 
print 'Server Name' + convert(varchar(30),@@SERVERNAME
print 'Instance' + convert(varchar(30),@@SERVICENAME
5. 查看所有数据库名称及大小 
sp_helpdb 

重命名数据库用的SQL 
sp_renamedb 
'old_dbname''new_dbname' 

6. 查看所有数据库用户登录信息 
sp_helplogins 

查看所有数据库用户所属的角色信息 
sp_helpsrvrolemember 

修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 

更改某个数据对象的用户属主 
sp_changeobjectowner 
[@objectname =] 'object'[@newowner =] 'owner' 

注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 

把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 

7. 查看链接服务器 
sp_helplinkedsrvlogin 

查看远端数据库用户登录信息 
sp_helpremotelogin 

8.查看某数据库下某个数据对象的大小 
sp_spaceused 
@objname 

还可以用sp_toptables过程看最大的N(默认为50)个表 

查看某数据库下某个数据对象的索引信息 
sp_helpindex 
@objname 

还可以用SP_NChelpindex过程查看更详细的索引情况 
SP_NChelpindex 
@objname 

clustered索引是把记录按物理顺序排列的,索引占的空间比较少。 
对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。 
查看某数据库下某个数据对象的的约束信息 
sp_helpconstraint 
@objname 

9.查看数据库里所有的存储过程和函数 
use @database_name 
sp_stored_procedures 
查看存储过程和函数的源代码 
sp_helptext 
'@procedure_name' 

查看包含某个字符串
@str的数据对象名称 
select distinct object_name(id) from syscomments where text like '%@str%' 

创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数 

解密加密过的存储过程和函数可以用sp_decrypt过程 

10.查看数据库里用户和进程的信息 
sp_who 
查看SQL Server数据库里的活动用户和进程的信息 
sp_who 
'active' 
查看SQL Server数据库里的锁的情况 
sp_lock 

进程号1
--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程. 
spid是进程编号,dbid是数据库编号,objid是数据对象编号 
查看进程正在执行的SQL语句 
dbcc inputbuffer () 

推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句 
sp_who3 

检查死锁用sp_who_lock过程 
sp_who_lock 

11.收缩数据库日志文件的方法 
收缩简单恢复模式数据库日志,收缩后
@database_name_log的大小单位为M 
backup log @database_name with no_log 
dbcc shrinkfile (@database_name_log5
12.分析SQL Server SQL 语句的方法: 

set statistics time {on | off
set statistics io {on | off
图形方式显示查询执行计划 

在查询分析器
->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形 

文本方式显示查询执行计划 
set showplan_all {on | off

set showplan_text { on | off } 
set statistics profile { on | off } 

13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法 

先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作 

alter database [@error_database_name] set single_user 

修复出现不一致错误的表 

dbcc checktable('@error_table_name',repair_allow_data_loss) 

或者可惜选择修复出现不一致错误的小型数据库名 

dbcc checkdb('@error_database_name',repair_allow_data_loss) 
alter database [@error_database_name] set multi_user 
CHECKDB 有3个参数: 
repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误, 
以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。 
修复操作可以在用户事务下完成以允许用户回滚所做的更改。 
如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。 
如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。 
修复完成后,请备份数据库。 
repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。 
这些修复可以很快完成,并且不会有丢失数据的危险。 
repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。 
执行这些修复时不会有丢失数据的危险。 

 

 

v*******************Transact_SQL********************

--语 句                                功 能
--
数据操作
SELECT      --从数据库表中检索数据行和列
INSERT      --向数据库表添加新数据行
DELETE      --从数据库表中删除数据行
UPDATE      --更新数据库表中的数据
--
数据定义
CREATE TABLE    --创建一个数据库表
DROP TABLE     --从数据库中删除表
ALTER TABLE     --修改数据库表结构
CREATE VIEW     --创建一个视图
DROP VIEW     --从数据库中删除视图
CREATE INDEX    --为数据库表创建一个索引
DROP INDEX     --从数据库中删除索引
CREATE PROCEDURE   --创建一个存储过程
DROP PROCEDURE    --从数据库中删除存储过程
CREATE TRIGGER    --创建一个触发器
DROP TRIGGER    --从数据库中删除触发器
CREATE SCHEMA    --向数据库添加一个新模式
DROP SCHEMA     --从数据库中删除一个模式
CREATE DOMAIN    --创建一个数据值域
ALTER DOMAIN    --改变域定义
DROP DOMAIN     --从数据库中删除一个域
--
数据控制
GRANT      --授予用户访问权限
DENY      --拒绝用户访问
REVOKE      --解除用户访问权限
--
事务控制
COMMIT      --结束当前事务
ROLLBACK     --中止当前事务
SET TRANSACTION    --定义当前事务数据访问特征
--
程序化SQL
DECLARE      --为查询设定游标
EXPLAN      --为查询描述数据访问计划
OPEN      --检索查询结果打开一个游标
FETCH      --检索一行查询结果
CLOSE      --关闭游标
PREPARE      --为动态执行准备SQL 语句
EXECUTE      --动态地执行SQL 语句
DESCRIBE     --描述准备好的查询

---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'

---全局变量
--
-必须以@@开头

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
 
print 'x > y' --打印字符串'x > y'
else if @y > @z
 
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
 
case
  
when job_level = ’1’ then e_wage*1.08
  
when job_level = ’2’ then e_wage*1.07
  
when job_level = ’3’ then e_wage*1.06
  
else e_wage*1.05
 
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
 
begin
  
print @x --打印变量x 的值
  while @y < 3
   
begin
    
select @c = 100*@x + @y
    
print @c --打印变量c 的值
    select @y = @y + 1
   
end
  
select @x = @x + 1
  
select @y = 1
 
end

--WAITFOR
--
例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00
select * from employee

 

***SELECT***

   
select *(列名) from table_name(表名) where column_name operator value
   ex:(宿主)
  
select * from stock_information where stockid   = str(nid)
     stockname 
= 'str_name' 
     stockname 
like '% find this %' 
     stockname 
like '[a-zA-Z]%' --------- ([]指定值的范围)
     stockname like '[^F-M]%'   --------- (^排除指定范围)
     --------- 只能在使用like关键字的where子句中使用通配符)
     or stockpath = 'stock_path'
     
or stocknumber < 1000
     
and stockindex = 24
     
not stocksex = 'man'
     stocknumber 
between 20 and 100
     stocknumber 
in(10,20,30)
     
order by stockid desc(asc--------- 排序,desc-降序,asc-升序
     order by 1,2 --------- by列号
     stockname = (select stockname from stock_information  where stockid  = 4)
     
--------- 子查询
     --------- 除非能确保内层select只返回一个行的值,
     --------- 否则应在外层where子句中用一个in限定符
  select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
  select stocknumber ,"stocknumber + 10= stocknumber + 10 from table_name
  
select stockname , "stocknumber" = count(*from table_name group by stockname
                                      
--------- group by 将表按行分组,指定列中有相同的值
          having count(*= 2  ---------  having选定指定的组
        
  
select * 
  
from table1, table2                  
  
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
     table1.id =* table2.id -------- 右外部连接 

  
select stockname from table1
  
union [all]  -----  union合并查询结果集,all-保留重复行
  select stockname from table2

***insert***

  
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
              value (
select Stockname , Stocknumber from Stock_table2)---value为select语句

***update***

  
update table_name set Stockname = "xxx" [where Stockid = 3]
         Stockname 
= default
         Stockname 
= null
         Stocknumber 
= Stockname + 4

***delete***

  
delete from table_name where Stockid = 3
  
truncate table_name ----------- 删除表中所有行,仍保持表的完整性
  drop table table_name --------------- 完全删除表

***alter table*** --- 修改数据库表结构

  
alter table database.owner.table_name add column_name char(2null ..
  sp_help table_name 
---- 显示表已有特征
  create table table_name (name char(20), age smallint, lname varchar(30))
  
insert into table_name select  ----- 实现删除列的方法(创建新表)
  alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束
    
***function(/*常用函数*/)***

----统计函数----
AVG    --求平均值
COUNT   --统计数目
MAX    --求最大值
MIN    --求最小值
SUM    --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id

--MAX
--
求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
 (
select max(e_wage)
  
from employee)

--STDEV()
--
STDEV()函数返回表达式中所有数据的标准差

--STDEVP()
--
STDEVP()函数返回总体标准差

--VAR()
--
VAR()函数返回表达式中所有值的统计变异数

--VARP()
--
VARP()函数返回总体变异数

----算术函数----

/***三角函数***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
/***反三角函数***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2) 
        
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
                       
--把弧度转换为角度返回与表达式相同的数据类型可为
        --INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
        --INTEGER/MONEY/REAL/FLOAT 类型
EXP(float_expression)  --返回表达式的指数值
LOG(float_expression)  --返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression) --返回表达式的平方根
/***取近似值函数***/
CEILING(numeric_expression)  --返回>=表达式的最小整数返回的数据类型与表达式相同可为
        --INTEGER/MONEY/REAL/FLOAT 类型
FLOOR(numeric_expression)    --返回<=表达式的最小整数返回的数据类型与表达式相同可为
        --INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression)    --返回以integer_expression 为精度的四舍五入值返回的数据
        --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression)      --返回表达式的绝对值返回的数据类型与表达式相同可为
        --INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression)     --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
        --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
PI()       --返回值为π 即3.1415926535897936
RAND([integer_expression])   --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数


----字符串函数----
ASCII()         --函数返回字符表达式最左端字符的ASCII 码值
CHAR()   --函数用于将ASCII 码转换为字符
    --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
LOWER()   --函数把字符串全部转换为小写
UPPER()   --函数把字符串全部转换为大写
STR()   --函数把数值型数据转换为字符型数据
LTRIM()   --函数把字符串头部的空格去掉
RTRIM()   --函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()  --函数返回部分字符串
CHARINDEX(),PATINDEX()  --函数返回字符串中某个指定的子串出现的开始位置
SOUNDEX()  --函数返回一个四位字符码 
    --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值     
DIFFERENCE()    --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
    --0 两个SOUNDEX 函数返回值的第一个字符不同
    --1 两个SOUNDEX 函数返回值的第一个字符相同
    --2 两个SOUNDEX 函数返回值的第一二个字符相同
    --3 两个SOUNDEX 函数返回值的第一二三个字符相同
    --4 两个SOUNDEX 函数返回值完全相同
                                       

QUOTENAME()  --函数返回被特定字符括起来的字符串
/*select quotename('abc', '{') quotename('abc')
运行结果如下
----------------------------------{
{abc} [abc]
*/


REPLICATE()     --函数返回一个重复character_expression 指定次数的字符串
/*select replicate('abc', 3) replicate( 'abc', -2)
运行结果如下
----------- -----------
abcabcabc NULL
*/


REVERSE()       --函数将指定的字符串的字符排列顺序颠倒
REPLACE()       --函数返回被替换了指定子串的字符串
/*select replace('abc123g', '123', 'def')
运行结果如下
----------- -----------
abcdefg
*/


SPACE()   --函数返回一个有指定长度的空白字符串
STUFF()   --函数用另一子串替换字符串指定位置长度的子串


----数据类型转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ]<expression> [, style])

select cast(100+99 as charconvert(varchar(12), getdate())
运行结果如下
------------------------------ ------------
199   Jan 15 2000

----日期函数----
DAY()   --函数返回date_expression 中的日期值
MONTH()   --函数返回date_expression 中的月份值
YEAR()   --函数返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>
    
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
    
--函数返回两个指定日期在datepart 方面的不同之处
DATENAME(<datepart> , <date>)  --函数以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>)  --函数以整数值的形式返回日期的指定部分
GETDATE()  --函数以DATETIME 的缺省格式返回系统当前的日期和时间

----系统函数----
APP_NAME()      --函数返回当前执行的应用程序的名称
COALESCE()  --函数返回众多表达式中第一个非NULL 表达式的值
COL_LENGTH(<'table_name'><'column_name'>--函数返回表中指定字段的长度值
COL_NAME(<table_id><column_id>)   --函数返回表中指定字段的名称即列名
DATALENGTH() --函数返回数据表达式的数据的实际长度
DB_ID(['database_name']--函数返回数据库的编号
DB_NAME(database_id)  --函数返回数据库的名称
HOST_ID()     --函数返回服务器端计算机的名称
HOST_NAME()     --函数返回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment][AS column_name])
 
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/*select identity(int, 1, 1) as column_name
 into newtable
 from oldtable
*/

ISDATE()  --函数判断所给定的表达式是否为合理日期
ISNULL(<check_expression><replacement_value>--函数将表达式中的NULL 值用指定值替换
ISNUMERIC()  --函数判断所给定的表达式是否为合理的数值
NEWID()   --函数返回一个UNIQUEIDENTIFIER 类型的数值
NULLIF(<expression1><expression2>)
 
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值

 

 

posted on 2010-01-21 20:33  WPF之家  阅读(170)  评论(0编辑  收藏  举报