【问题标题】:SQL Server: Find a specific word in all column in table [duplicate]SQL Server:在表的所有列中查找特定单词[重复]
【发布时间】:2015-09-18 17:56:37
【问题描述】:

我想在特定表格的所有列中查找特定单词。 我试过这个 sql select * from TestData where 'bisu' in (Name1,Name2,Name3) 它在列仅包含单词 bisu 但如果列包含类似文本时有效 Welcome bisu 然后我上面的 sql 失败了。

我遵循以下方法,该方法有效但有点大。所以任何人都告诉我如何仅通过普通 SQL 而不是调用存储过程来满足我的要求。

CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
   SET @sqlCommand = 'SELECT * FROM [' + @schema + '].[' + @table + '] WHERE'
   SET @where = ''

   SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
   FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = ''' + @schema + '''
   AND TABLE_NAME = ''' + @table + '''
   AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')'

   EXEC (@cursor)

   OPEN col_cursor   
   FETCH NEXT FROM col_cursor INTO @columnName   

   WHILE @@FETCH_STATUS = 0   
   BEGIN   
       IF @where <> ''
           SET @where = @where + ' OR'

       SET @where = @where + ' [' + @columnName + '] LIKE ''' + @stringToFind + ''''
       FETCH NEXT FROM col_cursor INTO @columnName   
   END   

   CLOSE col_cursor   
   DEALLOCATE col_cursor 

   SET @sqlCommand = @sqlCommand + @where
   --PRINT @sqlCommand
   EXEC (@sqlCommand) 
END TRY
BEGIN CATCH
   PRINT 'There was an error. Check to make sure object exists.'
   IF CURSOR_STATUS('variable', 'col_cursor') <> -3
   BEGIN
       CLOSE col_cursor   
       DEALLOCATE col_cursor 
   END
END CATCH 

EXEC sp_FindStringInTable 'Irv%', 'Person', 'Address'

谢谢

【问题讨论】:

  • 您可能想调查全文目录
  • 我不是在使用 mysql,而是在使用 sql server。
  • 这是您经常需要的东西还是一次性分析的东西?这种事情的表现将是彻头彻尾的糟糕。这是搜索类型的东西吗?如果是这样,您最好编写一个查询来显式处理列。
  • 这个问题有点笼统,但包含了您的问题的答案:search all tables, all columns for a specific value SQL Server
  • 这个问题有一些你正在寻找的答案:stackoverflow.com/questions/27918807/…

标签: sql-server


【解决方案1】:

你应该尝试关注,

Select 
 *
From TestData
Where 
1 = case when name1 like '%bisu%' then 1 else 0 end 
And 1 = case when name2 like '%bisu%' then 1 else 0 end 
And 1 = case when name3 like '%bisu%' then 1 else 0 end 

【讨论】:

    【解决方案2】:

    只是从谷歌搜索了各种答案,找到了一个不错的答案。

    select * from TestData
    WHERE  Name1 + Name2 + Name3 like '%bisu%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 2016-02-19
      • 1970-01-01
      • 2014-03-23
      • 2011-04-17
      • 2017-02-03
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多