【问题标题】:Search sql database for a column name, then search for a value within the retuned columns在 sql 数据库中搜索列名,然后在重新调整的列中搜索值
【发布时间】:2013-06-26 02:35:52
【问题描述】:

此查询将在数据库中搜索特定列名。我想更进一步,在返回的列中搜索特定值。

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name,
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Example%'

有什么想法吗?

非常感谢

【问题讨论】:

    标签: sql search


    【解决方案1】:

    这种搜索不存在这样的系统表。而您可以根据自己的目的尝试此操作

    DECLARE @ValueToSearch NVARCHAR(500)
    DECLARE @SearchColumn NVARCHAR(100)
    DECLARE @TableName NVARCHAR(200)
    DECLARE @ColumnName NVARCHAR(200)
    SET @ValueToSearch ='YOUR VALUE TP SEARCH'
    SET @SearchColumn = 'YOUR COLUMN'
    DECLARE @getResult CURSOR
    SET @getResult = CURSOR FOR
        SELECT t.name AS table_name,c.name AS column_name FROM sys.tables AS t INNER JOIN     sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE c.name = @SearchColumn
        OPEN @getResult
        FETCH NEXT FROM @getResult INTO @TableName,@ColumnName
        WHILE @@FETCH_STATUS = 0
        BEGIN
            SET NOCOUNT ON ;
            DECLARE @RESULT INT; 
            DECLARE @TYPE INT
            DECLARE @QUERY NVARCHAR(1000)
            SET @QUERY = 'select @RESULT=count(*) from ' + ISNULL(@TableName,'') +'     WHERE '+ ISNULL(@ColumnName,'')+'='''+ ISNULL(@ValueToSearch,'') +''''
            EXEC sp_executesql @QUERY,
                N'@result int OUTPUT, @type int OUTPUT',
                @RESULT OUTPUT, 
                @TYPE OUTPUT
            IF(ISNULL(@RESULT,0)>0)
            BEGIN
                SET NOCOUNT ON;
            SELECT ' COLUMN '+ @ColumnName + ' OF TABLE ' +@TableName+ ' HAS     THIS VALUE.'
            END
            FETCH NEXT FROM @getResult INTO @TableName,@ColumnName
        END
    CLOSE @getResult
    DEALLOCATE @getResult
    

    谢谢

    马诺杰

    【讨论】:

    • 非常感谢 Manoj。这要快得多!你知道我如何将结果返回到一个集合吗?
    • 好吧,你可以使用任何临时表或表变量来达到目的。
    【解决方案2】:

    例如,我有一个名为 Organisation 的数据库。我有多个表格,其中存在 tax_id 列。

    大多数时候,我们必须从整个数据库中找到这样的一列。 解决方法如下:

    select table_name,column_name from information_schema.columns
    where column_name like '%tax%'
    

    在查询数据库名称时,您只需更改愿意的列名即可找到所需的结果

    在整个数据库中搜索任何值 Like computer 在哪个列和哪个表中存在值计算机

    为此,我们首先需要编写一个存储过程,然后我们将它重用于我们的搜索,我从http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm 得到了非常完美的结果。 执行存储过程后,我们得到了所需的结果,如下图所示。 图像显示了整个数据库中关键字计算机的完整搜索结果。

    以上是解决它的概念。以下是满足上述要求的精确查询

    Select tax_id from (select table_name from information_schema.columns
    where column_name = 'tax_id') as temp
    

    【讨论】:

    • 感谢@rizwan,Rizwan 摇滚。 :-) ;-)
    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2012-08-16
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多