SQL Server 常用sql操作语句

/*创建表*/
CREATE TABLE [UserInfo](
    [UserID] [uniqueidentifier] not null,
    [UserName] [varchar](100not null,
    [LoginNumber] [varchar](50not null,
    [Password] [varchar](50not null,
    [a] [decimal](18,2null,
    [b] [decimal](18,2null,
    [c] as ([a]*[b]),

    [d] as ([a]*[b]) PERSISTED   /*不设置PERSISTED代表该列是一个虚拟列,也就是这个列实际上是不存在的,只是每次要取这列的值时,sql会按照计算列的公式计算一次,再把结果返回给我们。这样会存在一些问题,比如计算会消耗一定的时间,而且不能在该列上创建索引。设置PERSISTED后代表该列是实际存在的列*/
    );
 
/*删除表*/
drop table [UserInfo];

/*添加主键约束*/
ALTER TABLE [UserInfo] ADD  CONSTRAINT [PK_UserInfo]  primary key([UserID]);

/*添加默认值约束*/
ALTER TABLE [UserInfo] ADD  CONSTRAINT [DF_UserInfo_UserID]  default (newid()) for [UserID];

/*添加字段*/
alter table [UserInfo] add [Sex] [varchar](10null;

/*修改字段*/
alter table [UserInfo] alter column [Sex] [varchar](20null;

/*删除字段*/
alter table [UserInfo] drop column [Sex];

/*批量插入*/
insert into [UserInfo]([Username],[LoginNumber],[Password],[Sex] select [UserName],[LoginNumber],[Password],[Sex] from [UserInfo];

/*批量更新*/
update [UserInfo1] set [UserInfo1].[Password]=b.[Password],[UserInfo1].[Sex]=b.[Sex] from [UserInfo] b where [UserInfo1].[LoginNumber]=b.[LoginNumber];

/*创建临时表*/
create table #TempTable(
    [LoginNumber] [varchar](50),
    [Password] [varchar](50)
    );

/*自增列*/
create table [TestTable](
  [ID] [int] identity(1,1not null
  );

/* 获取所有用户名

 * islogin='1'表示帐户
 * islogin='0'表示角色
 * status='2'表示用户帐户
 * status='0'表示系统帐户
 */

select [name] from sysusers where status='2' and islogin='1'


/*获取所有数据库名*/
select [name] from master..sysdatabases order by [name]


/* 获取所有表名
 * xtype='U'表示所有用户表
 * xtype='S'表示所有系统表
 */

select [name] from 数据库名..sysobjects where [xtype]='U' order by [name]


/*获取所有字段名*/
select [name] from syscolumns where id=object_id('表名')


/*获取数据库所有类型*/

select [name] from systypes 

/*获取指定表中代表主键的字段名*/
select name from syscolumns a where exists(select 1 from sysindexkeys where id=a.id and colid=a.colid) and id=object_id('表名');
 

/*获取表主键*/

select o.name as 表名,c.name as 字段名,k.colid as 字段序号,k.keyno as 索引顺序,t.name as 类型 
from sysindexes i 
join sysindexkeys k on i.id = k.id and i.indid = k.indid 
join sysobjects o on i.id = o.id 
join syscolumns c on i.id=c.id and k.colid = c.colid 
join systypes t on c.xusertype=t.xusertype 
where o.xtype = 'U' and o.name='要查询的表名' 
and exists(select 1 from sysobjects where xtype = 'PK' and parent_obj=i.id and name = i.name) 

order by o.name,k.colid

/*获取表中字段名和类型*/

select c.name as 字段名,t.name as 类型 
from sysindexes i 
join sysobjects o on i.id = o.id 
join syscolumns c on i.id=c.id 
join systypes t on c.xusertype=t.xusertype 
where o.xtype = 'U' and o.name='要查询的表名' 
and exists(select 1 from sysobjects where xtype = 'PK' and parent_obj=i.id and name = i.name) 
order by o.name

/*获取表中字段名、类型、默认值*/

select c.name as 字段名,t.name as 类型,e.text as 默认值
from sysindexes i 
join sysobjects o on i.id = o.id 
join syscolumns c on i.id=c.id 
join systypes t on c.xusertype=t.xusertype 
left join syscomments e on e.id=c.cdefault
where o.xtype = 'U' and o.name='DBConfig' 
and exists(select 1 from sysobjects where xtype = 'PK' and parent_obj=i.id and name = i.name) 
order by o.name
select * from syscomments
 

/*获取表所有列*/
SELECT 
    表名=case when a.colorder=1 then d.name else '' end
    字段名=a.name, 
    标识=case when COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1 then '' else '' end
    主键=case when exists(SELECT 1 FROM sysobjects where xtype= 'PK' and name in ( 
SELECT name FROM sysindexes WHERE indid in
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid 
))) then '' else '' end
    类型=b.name, 
    占用字节数=a.length, 
    长度=COLUMNPROPERTY(a.id,a.name, 'PRECISION'), 
    小数位数=isnull(COLUMNPROPERTY(a.id,a.name, 'Scale'),0), 
    允许空=case when a.isnullable=1 then ''else '' end
    默认值=isnull(e.text''), 
    字段说明=isnull(g.[value]''
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' and d.name = '要查询的表名'
    left join syscomments e on a.cdefault=e.id 
    left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id and g.name='MS_Description' 
order by a.id,a.colorder 


/*获取表自增列名称*/
select COLUMN_NAME as 标识 
FROM INFORMATION_SCHEMA.columns 
where TABLE_NAME='要查询的表' and COLUMNPROPERTY(OBJECT_ID('要查询的表'),COLUMN_NAME,'IsIdentity')=1


/*获取表的字段默认值*/
select b.text as 字段默认值 
from syscolumns a left join syscomments b on a.cdefault = b.id 
where a.id = object_id('要查询的表'and a.name = '字段' 

/*按姓氏笔画排序*/
Select * from TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 

/*获取当前数据库中的所有用户表*/
select * from sysobjects where xtype='U' and category=0

/*查询用户创建的所有数据库*/
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

/*按全文匹配方式查询*/
字段名 LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%' 
OR 字段名 LIKE N'%[^a-zA-Z0-9]China' 
OR 字段名 LIKE N'China[^a-zA-Z0-9]%' 
OR 字段名 LIKE N'China'

/*计算执行SQL语句查询时间*/
declare @d datetime 
set @d=getdate() 
select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

/*几个高级查询运算词*/
A:UNION 运算符 
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 
B:EXCEPT 运算符 
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 
C:INTERSECT 运算符 
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
 

/*记录不存在就直接插入新记录,记录存在就更新*/ 

if exists (select 1 from [tb] where [name]='aa')
    begin
        update [tb] set [name]='bb' where [name]='aa'
    end
else
    begin
        insert into [tb]([name]select 'aa'
   end 

/*判断指定表中是否存在指定的列名*/

if(not exists(select * from syscolumns where name = 'IsUpdate' and id in 

(select id from sysobjects where id = object_id(N'[TestTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1))) 

    alter table [TestTable] add [IsUpdate] [int];
原文地址:https://www.cnblogs.com/sydeveloper/p/2811778.html