[UserID] [uniqueidentifier] not null,
[UserName] [varchar](100) not null,
[LoginNumber] [varchar](50) not null,
[Password] [varchar](50) not null,
[a] [decimal](18,2) null,
[b] [decimal](18,2) null,
[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](10) null;
/*修改字段*/
alter table [UserInfo] alter column [Sex] [varchar](20) null;
/*删除字段*/
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,1) not 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
/*获取表中字段名和类型*/
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
/*获取表中字段名、类型、默认值*/
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'
declare @d datetime
set @d=getdate()
select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
/*几个高级查询运算词*/
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];