在数据库的所有表中搜索字符串和数字

时间:2018-10-25 07:37:34

标签: sql sql-server search

我试图在多个地方搜索几天,但此脚本未成功。 我需要在数据库的所有表的同一记录中搜索String(NVarChar)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      |

******我在这个绝佳的地方找到了这个脚本,但是它只搜索字符串数据,并且仅搜索一次,但是我需要找到一个字符串和一个数字,并且仅查找两个记录均可用的记录。

StackOverFlow

让我尝试更好地向我解释,希望我的英语有所帮助。 假设有一个包含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

希望足够清楚。 再次谢谢你。

3 个答案:

答案 0 :(得分:0)

对于使用AND运算符的两个条件都使用where子句

select * from tablename where FIELD_A='AAA' and FIELD_B=990

答案 1 :(得分:0)

使用相关子查询

select * from  your_table t 
                where exists ( select 1 from your_table t1
                                             where t1.FIELD_A=t.FIELD_A and
                                                         t1.FIELD_B=990
                             )

答案 2 :(得分:0)

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

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)