文章目录
- 前言
- 查询包含表的视图
- 查询自增列
- 扩充知识之定义自增列
前言
首先,我用的是sql server。
查询包含表的视图
当我想知道数据库中有多少视图、存储过程包含某数据表时,可以这样写
SELECT DISTINCT OBJECT_NAME(id) FROM syscomments WHERE id IN(SELECT id FROM sysobjects WHERE type IN ('v','p'))
AND text LIKE '%tablename%'ORDER BY OBJECT_NAME(id)
这段语句返回视图或存储过程名称
查询自增列
自增列就是插入数据时某字段不用手动赋值,随着表数据自己增长,一般用identify标识。
我想查询某个表有什么字段是自增的,可以用下面语句查询。
SELECT * FROM syscolumns WHERE id=OBJECT_ID(N'tablename') AND COLUMNPROPERTY(id,name,'IsIdentity')=1
SELECT * FROM syscolumns WHERE id=OBJECT_ID(N'tablename') AND status=0x80`
两种方法均可,字符串前面加N是表示该字符串是unicode格式。
返回结果第一个字段是自增列名称
或者编写表脚本查看
sqlserver选中某数据表右键–编写表脚本为–create 到–新查询编辑器窗口
从这个脚本就能知道啦,自增列后面会带identity
扩充知识之定义自增列
- 定义自增列可以在sqlserver中表的设计界面选择某字段设置列属性
将标识规范是标识选为是即可
标识增量表示自增数据起始数字,标识种子表示跨度
- 定义自增列也可以使用T-SQL语句,分为以下三种情况:
1.修改某表增加自增列
alter table 表名 add ID int identity(1,1)
identity第一个参数表示自增数据起始数字,第二个表示跨度,也就是加几
2.创建表设置某字段自增
下面字段dID是自增的
CREATE TABLE [dbo].[LPMS_EHSHiddenDangerBaseInfo](
[dID] [decimal](18, 0) IDENTITY(1,1) NOT NULL,
[cType] [varchar](50) NULL,
)
3.那我一个表的id字段一开始手动插入的的,后面我想换成自增了可以吗?
一般自增列是不能修改的,但是你可以删除旧的字段,再建立一个新的字段
alter table 表名 add ID int identity(1,1)
alter table 表名 drop column ID
实现操作不难,但是在实际业务中要注意历史数据的处理
不然这个字段是id标识列,你删掉,所有数据都没id了,不是闯了大祸啦!
规范操作:删掉之前要把旧id列的值赋值给新id列,然后才能放心删除不要的字段。
UPDATE [tableName] SET [字段名副本]=字段名 WHERE 1=1
加个where 1=1是为了不要提示,主要没有where会默认全表执行,MSSQL会提示一波,麻烦。
还有个使用场景就是查询某表加上where 1=1,这样后面筛选条件sql拼接时候直接写and就行,方便简洁。