簡體   English   中英

SQL查詢返回其中一個或多個字段包含某個值的所有行

[英]SQL query to return all rows where one or more of the fields contains a certain value

是否可以在表上運行一次select以快速找出是否有一個 (或多個)字段包含特定值?

還是您必須在where子句中寫出所有列名?

正如其他人所說,您可能必須手動或以編程方式將所有列寫入WHERE子句。 SQL不包含直接執行此操作的功能。 一個更好的問題可能是“您為什么需要這樣做?”。 需要使用這種類型的查詢可能是一個很好的信號,表明您的數據庫沒有被正確規范化 如果您告訴我們您的方案,我們也可以為該問題提供幫助(如果這是實際問題)。

我認為您需要在where子句中列出所有列。 我離SQL向導還很遠……也許其他人知道一種方法。

你將不得不寫出來

當然,您必須寫出要用作條件的所有列。

如果添加您正在使用的編程語言以及在哪種類型的環境中工作,我們可以為您提供動態實現的線索或解決方案。

我認為您的問題確實是如何根據程序用戶在“搜索”表單中填寫的內容動態地執行此操作。

如果沒有,那么..給我們更多信息。 ;)

挖這個...它將搜索數據庫中的所有表,但是您可以將其修改為僅一個表。

/*This script will find any text value in the database*/
/*Output will be directed to the Messages window. Don't forget to look there!!!*/

SET NOCOUNT ON
DECLARE @valuetosearchfor varchar(128), @objectOwner varchar(64)
SET @valuetosearchfor = '%staff%' --should be formatted as a like search 
SET @objectOwner = 'dbo'

DECLARE @potentialcolumns TABLE (id int IDENTITY, sql varchar(4000))

INSERT INTO @potentialcolumns (sql)
SELECT 
    ('if exists (select 1 from [' +
    [tabs].[table_schema] + '].[' +
    [tabs].[table_name] + 
    '] (NOLOCK) where [' + 
    [cols].[column_name] + 
    '] like ''' + @valuetosearchfor + ''' ) print ''SELECT * FROM [' +
    [tabs].[table_schema] + '].[' +
    [tabs].[table_name] + 
    '] (NOLOCK) WHERE [' + 
    [cols].[column_name] + 
    '] LIKE ''''' + @valuetosearchfor + '''''' +
    '''') as 'sql'
FROM information_schema.columns cols
    INNER JOIN information_schema.tables tabs
        ON cols.TABLE_CATALOG = tabs.TABLE_CATALOG
            AND cols.TABLE_SCHEMA = tabs.TABLE_SCHEMA
            AND cols.TABLE_NAME = tabs.TABLE_NAME
WHERE cols.data_type IN ('char', 'varchar', 'nvchar', 'nvarchar','text','ntext')
    AND tabs.table_schema = @objectOwner
    AND tabs.TABLE_TYPE = 'BASE TABLE'
ORDER BY tabs.table_catalog, tabs.table_name, cols.ordinal_position

DECLARE @count int
SET @count = (SELECT MAX(id) FROM @potentialcolumns)
PRINT 'Found ' + CAST(@count as varchar) + ' potential columns.'
PRINT 'Beginning scan...'
PRINT ''
PRINT 'These columns contain the values being searched for...'
PRINT ''
DECLARE @iterator int, @sql varchar(4000)
SET @iterator = 1
WHILE @iterator <= (SELECT Max(id) FROM @potentialcolumns)
BEGIN
    SET @sql = (SELECT [sql] FROM @potentialcolumns where [id] = @iterator)
    IF (@sql IS NOT NULL) and (RTRIM(LTRIM(@sql)) <> '')
    BEGIN
        --SELECT @sql --use when checking sql output
        EXEC (@sql)
    END
    SET @iterator = @iterator + 1
END

PRINT ''
PRINT 'Scan completed'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM