首页 > 解决方案 > 在数据库中的所有表中搜索字符串和数字

问题描述

我试图在几个地方搜索几天,但没有成功使用这个脚本。我需要在数据库中的所有表中搜索同一记录中的aString(NVarChar)和 a 。Number(Int)在以下示例中,我需要找到同时存在这两个条件的表和字段。例如,查找 AAA 字符串,但前提是存在编号为 990 的字段。

TBL_TEST

FIELD_A    |    FIELD_B    |    FIELD_C   |
AAA        |     124       |      12      |
BBB        |     457       |      12      |
CCC        |     347       |      12      |
AAA        |     990       |      13      | <---
BBB        |     387       |      13      |
CCC        |     213       |      13      |
AAA        |     888       |      14      |
BBB        |     888       |      14      |
CCC        |     888       |      14      |

****** 我在这个好地方找到了这个脚本,但它只搜索字符串数据并且只出现一次,但我需要找到一个字符串和一个数字,并且只需要两个记录都可用的记录。

堆栈溢出

让我试着更好地解释我,希望我的英语有所帮助。想象一个有 3 个表(TBL1、TBL2 和 TBL3)的数据库。这些表有几列,但在本例中,每个表我只放置 3 列。

TBL1

FIELD_A    |    FIELD_B    |    FIELD_C   |
AAA        |     124       |      132     |
BBB        |     457       |      1E2     |
CCC        |     347       |      1E2     |
AAA        |     KK0       |      13W     | 
BBB        |     387       |      136     |
CCC        |     213       |      133     |
AAA        |     888       |      990     |<---
BBB        |     888       |      144     |
CCC        |     888       |      14      |

TBL2

FIELD_A    |    FIELD_B    |    FIELD_C   |
AAA        |     ASD       |      12      |
BBB        |     3ED       |      12      |
CCC        |     32E       |      12      |
AAA        |     990       |      13      |<---
BBB        |     123       |      13      |
CCC        |     213       |      13      |
AAA        |     445       |      14      |
BBB        |     234       |      14      |
CCC        |     A23       |      14      |

TBL3

FIELD_A    |    FIELD_B    |    FIELD_C   |
AAA        |     124       |      132     |
BBB        |     457       |      990     |
CCC        |     347       |      1E2     |
AAA        |     KK0       |      13W     | 
BBB        |     387       |      136     |
CCC        |     213       |      133     |
AAA        |     888       |      990     |
BBB        |     888       |      144     |
990        |     888       |      AAA     |<---

脚本的结果必须是这样的。

TBL1
FIELD_A / FIELD_C
TBL2
FIELD_A / FIELD_B
TBL3
FIELD_A / FIELD_C

希望足够清楚。再次感谢您。

标签: sqlsql-serversearch

解决方案


您需要在所有表中动态搜索两个值,以这个简单的示例为例(尝试粘贴并执行):

DECLARE @SQL AS nvarchar(MAX)
    SET @SQL = ''
    Select  @SQL = @SQL + 'Select * from TBL_TEST where '+ISC.COLUMN_NAME+'= ''AAA'' AND '+(Select top(1) C.COLUMN_NAME FROM 
        INFORMATION_SCHEMA.TABLES T
        INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME
    where IST.TABLE_NAME = 'TBL_TEST' and C.TABLE_NAME ='TBL_TEST'  and c.COLUMN_NAME<>ISC.COLUMN_NAME)+'= ''990'''
    FROM 
        INFORMATION_SCHEMA.TABLES IST
        INNER JOIN INFORMATION_SCHEMA.COLUMNS ISC ON IST.TABLE_NAME = ISC.TABLE_NAME
    where IST.TABLE_NAME = 'TBL_TEST'

    exec(@SQL)

推荐阅读