1.Sqlserve的系统数据库是sys,其中一个很重要的表为sysobjects表(系统对象表),具体可以百度
2.通过sysobjects表我们可以获取某个数据库所有表名称:SELECT name FROM sys.sysobjects Where XType='U'
3.查找某个数据库非空数据表方法:
--这个根据存储区来判断
select B.name from sys.partitions A inner join sys.objects Bon A.object_id=B.object_id
where B.type='U' and A.rows>0
--这个根据索引表来判断
select B.name from sysindexes A inner join sys.objects Bon A.id=B.object_id
where B.type='U' And A.rows >0
4.查找某个字符串在哪张表的方法
use hswinrun2
declare @str varchar(100)
set @str='缺省利率组别' --要搜索的字符串
declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
5.内连接、外连接、交叉连接
sql连接方式有:(inner)join(内连接)、left join(左连接)、right join( 右连接)、full join(全连接)、cross join(交叉连接)
其中left join(左连接)、right join( 右连接)、full join(全连接)属于外连接
inner join:列出双方共有的部分
left join:左边为主表全部显示,右边相等部分列出,不等部分用null表示
right join:右边为主表全部显示,左边相等部分列出,不等部分用null表示
full join:显示连个表的全部信息,不等的部分均用null表示
cross join:两个表的笛卡尔积
6.帮助语句
1.查看表结构 sp_help
2.查看生成视图的sql语句 sp_helptext
7sqlserver 中sql变量赋值有两种方法:set 和select
1.set 返回空值,则变量被赋null
2.select 返回空值,则变量保持原值
3.select 返回多值,保存最后一个
4.set 不可用于返回多值
8查询某个字段在那张表
use db_name
select [name] from sysobjects where [id] in (select [id] from syscolumns where [name]='col_name')
其中 db_name 是待查的数据库名称,col_name 是待查列名
9.查询某表 某列 的长度
if exists(select * from sysobjects where name = 'sp_helpcol')
drop procedure sp_helpcol
go
create procedure sp_helpcol
@table_name varchar(255),
@col_name varchar(255)
as
select
@table_name =ISNULL(@table_name,''),
@col_name =ISNULL(@col_name,'')
select name,[length] from syscolumns where id=object_id(@table_name) and name=@col_name
使用方式如下:
sp_helpcol 'loanrival','vc_rival_roles'
7.增加列后,可能存在约束这样 直接在sqlserver上删除约束或者列会不奏效,那么可以用sql语句删除 如
use hswinrun2
declare
@vc_table_name varchar(255),
@vc_col_name varchar(255),
@constrant varchar(255),
@vc_sql varchar(8000)
select
@vc_table_name='intrustplanbasicinfo',
@vc_col_name='vc_main_stock_no',
@constrant='',
@vc_sql=''
select @constrant=c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id(@vc_table_name) and b.name=@vc_col_name
set @vc_sql='alter table hswinrun2..'+@vc_table_name+' drop constraint '+@constrant
exec(@vc_sql) -- 删除约束
set @vc_sql='alter table hswinrun2..'+@vc_table_name+' drop column '+@vc_col_name
exec(@vc_sql) -- 删除字段
go
5. 查找数据库实例包含的所有数据库(原因 排查死锁时 经常给的是数据库id 所以要查一下)
select * from master..sysdatabases