如何搜索表中所有列中的特定值?

Ahm*_*lla 1 sql sql-server search sql-server-2008

我有一个table(students_all),包含4列如下: -

  • 学生姓名
  • 年龄
  • 学生卡

现在,我如何'left'使用SQL Server 2008搜索特定值,例如在一个查询的所有列中.

我的意思是如何使Excel(Ctrl+ F)之类的东西在所有列中找到任何值.

shA*_*A.t 7

有很多方法可以检查在一个SQL中为特殊表找到类似的东西,所以我建议这样:

SELECT *
FROM students_all
WHERE student_name + age + student_id + class LIKE '%left%';
Run Code Online (Sandbox Code Playgroud)

但是对于一种动态的方式我使用它:

DECLARE @TableName nvarchar(256) = 'Table_1';
DECLARE @Find nvarchar(50) = '1';

DECLARE @sql nvarchar(max) = '';

SELECT @sql = @sql + 
    CASE 
        WHEN @sql = '' THEN ''
        ELSE '+ '
    END + 'CONVERT(nvarchar(max), ISNULL(' + cols.COLUMN_NAME + ', '''')) COLLATE DATABASE_DEFAULT '
FROM INFORMATION_SCHEMA.COLUMNS cols
WHERE cols.TABLE_NAME = @TableName;

SELECT @sql = 'SELECT * FROM ' + @TableName + ' WHERE ' + @sql + ' LIKE ''%' + @Find + '%''';

-- Or if you want to add other field types you can use this instead:
--SELECT @sql = 'SELECT * FROM ' + @TableName + ' WHERE CAST(' + @sql + ' AS NVARCHAR(MAX)) LIKE ''%' + @Find + '%''';

EXEC(@sql);
Run Code Online (Sandbox Code Playgroud)


小智 2

SELECT *
FROM students_all as t
WHERE t.student_name == 'left'
      OR t.age == 'left'
      OR t.student_id == 'left'
      OR t.class == 'left'
Run Code Online (Sandbox Code Playgroud)

没有一种“快速”方法可以一次检查每一列,您需要逐一检查每一列!