在SQLServer中查找包含两个特定列的表

您所在的位置:网站首页 精灵宝可梦火红神奇糖果 在SQLServer中查找包含两个特定列的表

在SQLServer中查找包含两个特定列的表

2023-03-15 07:46| 来源: 网络整理| 查看: 265

我想在SQL Server中找到包含两个特定单独列的所有表.

第一列名称是"LIKE'%A%'"(意思是它包含子字符串"A"),第二列名称是"LIKE'%B%'"(意思是它包含子字符串"B").

我写了以下查询,我想检查它的正确性:

SELECT s.TABLE_NAME FROM (SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%A%' UNION SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%B%') s WHERE EXISTS (SELECT COLUMN_NAME, s.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%A%') AND EXISTS (SELECT COLUMN_NAME, s.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%B%');

Shnugo.. 5

这应该更容易:

SELECT s.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES AS s WHERE s.TABLE_TYPE='BASE TABLE' AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%A%') AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%B%'); UPDATE

使用此代码,您会发现所有列都适合作为列表的标准...

SELECT s.TABLE_NAME,listA,listB FROM INFORMATION_SCHEMA.TABLES AS s CROSS APPLY (SELECT STUFF( ( SELECT ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%med%' ORDER BY ORDINAL_POSITION FOR XML PATH('') ),1,2,'') ) AS columnsWithA(listA) CROSS APPLY (SELECT STUFF( ( SELECT ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE 'kli%' ORDER BY ORDINAL_POSITION FOR XML PATH('') ),1,2,'') ) AS columnsWithB(listB) WHERE s.TABLE_TYPE='BASE TABLE' AND listA IS NOT NULL AND listB IS NOT NULL 更新2

AND listAlistB AND CHARINDEX(',',listA)=0只要只有一列(=>无逗号),最终你将排除相同的listA和listB

1> Shnugo..:

这应该更容易:

SELECT s.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES AS s WHERE s.TABLE_TYPE='BASE TABLE' AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%A%') AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%B%'); UPDATE

使用此代码,您会发现所有列都适合作为列表的标准...

SELECT s.TABLE_NAME,listA,listB FROM INFORMATION_SCHEMA.TABLES AS s CROSS APPLY (SELECT STUFF( ( SELECT ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE '%med%' ORDER BY ORDINAL_POSITION FOR XML PATH('') ),1,2,'') ) AS columnsWithA(listA) CROSS APPLY (SELECT STUFF( ( SELECT ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=s.TABLE_NAME AND COLUMN_NAME LIKE 'kli%' ORDER BY ORDINAL_POSITION FOR XML PATH('') ),1,2,'') ) AS columnsWithB(listB) WHERE s.TABLE_TYPE='BASE TABLE' AND listA IS NOT NULL AND listB IS NOT NULL 更新2

AND listAlistB AND CHARINDEX(',',listA)=0只要只有一列(=>无逗号),最终你将排除相同的listA和listB



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3