查询所有的表中,有没有列名 为 某一个字符串的 SQL文 或者 unique行 有哪些表 哪些行
2016-08-25 23:33
357 查看
Sql Server
==========查询列名有firm或者Firm字符串的所有表。
SELECT t.name AS table_name,
SCHEMA_NAME(t.schema_id) AS schema_name,
c.name AS column_name , types.name, c.max_length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
inner join sys.types types on types.system_type_id = c.system_type_id
WHERE c.name LIKE '%firm%' or c.name like '%Firm%'
ORDER BY schema_name, table_name
===================unique行=======
SELECT tab.name, idx.name, col.name FROM sys.indexes idx JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
AND idx.is_unique_constraint = 1)
AND idx.name='UQ__CPSRepor__1C0FB63C64CE895C'
JOIN sys.tables tab
ON
(idx.object_id = tab.object_id)
AND tab.name='CPSReportConfig'
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id)
AND col.name='reportName'
======================drop unique========
这个是index的名字,不是列的名字
ALTER TABLE CPSReportConfig
DROP CONSTRAINT UQ__CPSRepor__1C0FB63C64CE895C
--------------------------------------------------------------------------------------
“唯一性约束”和“唯一性索引”是不同的。
一、 建立唯一性约束的语法,使用create table或者alter table
1. 在字段级约束定义
-- 命名
create table tmp_table
(
a int constraint pk_tmp_table_a primary key,
b varchar(10) constraint uq_tmp_table_b unique
)
-- 不命名
create table tmp_table
(
a int primary key,
b varchar(10) unique
)
2. 在表约束定义
-- 命名
create table tmp_table
(
a int,
b varchar(10),
constraint pk_tmp_table_a primary key(a),
constraint uq_tmp_table_b unique(b ASC)
)
-- 不命名
create table tmp_table
(
a int,
b varchar(10),
primary key(a),
unique(b ASC)
)
二、 建立唯一性索引的语法,使用create index
-- 必须命名
CREATE UNIQUE NONCLUSTERED INDEX xak_tmp_table_b ON tmp_table(b DESC)
--不指定[CLUSTERED | NONCLUSTERED],缺省为NONCLUSTERED(非聚集)
三、当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引
这是以上脚本建立的约束:
这是索引:
可以看出,为主键和唯一性约束自动建立了同名唯一性索引。
现在为表建立了排序顺序相反的两个索引uq_tmp_table_b和xak_tmp_table_b,不知道数据库会怎么工作?
四、题外话
表级约束中可以指定列的排序顺序(col_name ASC | DESC),但不能指定列的NULL约束;
字段级约束中可以指定列的NULL约束,但不能指定列的排序顺序;
==========查询列名有firm或者Firm字符串的所有表。
SELECT t.name AS table_name,
SCHEMA_NAME(t.schema_id) AS schema_name,
c.name AS column_name , types.name, c.max_length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
inner join sys.types types on types.system_type_id = c.system_type_id
WHERE c.name LIKE '%firm%' or c.name like '%Firm%'
ORDER BY schema_name, table_name
===================unique行=======
SELECT tab.name, idx.name, col.name FROM sys.indexes idx JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
AND idx.is_unique_constraint = 1)
AND idx.name='UQ__CPSRepor__1C0FB63C64CE895C'
JOIN sys.tables tab
ON
(idx.object_id = tab.object_id)
AND tab.name='CPSReportConfig'
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id)
AND col.name='reportName'
======================drop unique========
这个是index的名字,不是列的名字
ALTER TABLE CPSReportConfig
DROP CONSTRAINT UQ__CPSRepor__1C0FB63C64CE895C
--------------------------------------------------------------------------------------
“唯一性约束”和“唯一性索引”是不同的。
一、 建立唯一性约束的语法,使用create table或者alter table
1. 在字段级约束定义
-- 命名
create table tmp_table
(
a int constraint pk_tmp_table_a primary key,
b varchar(10) constraint uq_tmp_table_b unique
)
-- 不命名
create table tmp_table
(
a int primary key,
b varchar(10) unique
)
2. 在表约束定义
-- 命名
create table tmp_table
(
a int,
b varchar(10),
constraint pk_tmp_table_a primary key(a),
constraint uq_tmp_table_b unique(b ASC)
)
-- 不命名
create table tmp_table
(
a int,
b varchar(10),
primary key(a),
unique(b ASC)
)
二、 建立唯一性索引的语法,使用create index
-- 必须命名
CREATE UNIQUE NONCLUSTERED INDEX xak_tmp_table_b ON tmp_table(b DESC)
--不指定[CLUSTERED | NONCLUSTERED],缺省为NONCLUSTERED(非聚集)
三、当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引
这是以上脚本建立的约束:
constraint_type | constraint_name | constraint_keys |
PRIMARY KEY (clustered) | pk_tmp_table_a | a |
UNIQUE (non-clustered) | uq_tmp_table_b | b |
index_name | index_description | index_keys |
pk_tmp_table_a | clustered, unique, primary key located on PRIMARY | a |
uq_tmp_table_b | nonclustered, unique, unique key located on PRIMARY | b |
xak_tmp_table_b | nonclustered, unique located on PRIMARY | b(-) |
现在为表建立了排序顺序相反的两个索引uq_tmp_table_b和xak_tmp_table_b,不知道数据库会怎么工作?
四、题外话
表级约束中可以指定列的排序顺序(col_name ASC | DESC),但不能指定列的NULL约束;
字段级约束中可以指定列的NULL约束,但不能指定列的排序顺序;
相关文章推荐
- “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
- 查询一个表的所有列名的语句
- 查询所有的存储过程哪些中包含某个字符串
- 查询所有的存储过程哪些中包含某个字符串
- 查询所有员工的信息,并将查询结果中的每个列的列名起一个中文的别名*/
- 反转一个字符串和删除N层级目录的所有文件或者删除数据库所有表保留数据库;清除数据库所有表的数据
- SQL Server查询一个表的所有列名的SQL语句
- Oracle查询一个表的所有列名
- mysql查询一个列名都存在于哪些表
- 动态查询一个树形结构表中:某一个节点的所有父节点或者子节点
- oracle 查询数据库中所有表名及查询某一个表的所有列名
- 传入一个字符串,输出某个字符或者字符串在传入字符串中的所有位置
- YII 报错 列名必须是一个字符串或者数组
- 查询postgresql数据库所有表中的所有字段包含一个字符串
- sql2000中查询一个表中的所有列名
- .net 查询表中某个条件下,所有的字符串组装成一个字符串
- 一个80年小子的创业道理,和所有准备创业或者正在创业的分享
- 有一个数据表,但是我只知道一个字段的名称。现在我想查询数据库里面的除去这个字段的所有数据!
- 获得一个表中的所有列名和列数
- 取得一个数据表的所有列名