选择与包含单元格相关的任何列

时间:2016-06-24 06:19:48

标签: sql-server

我有一张名为a的表。一些单元格在许多列中包含字符串“Empty”。我想找到这个专栏。你能救我吗?。

5 个答案:

答案 0 :(得分:1)

使用<button type="submit" id="submitBtn">submit</button> $("#submitBtn").on('click',function(event){ var value = $("#concept_name").val(); if(value.length > 50){ alert("Maximum limit is 50 character"); event.preventDefault(); } }); 运算符:

LIKE

答案 1 :(得分:1)

在sql server中,你可以获取表的对象id,然后使用你可以获取列的对象id。在这种情况下,它将如下:

第1步:首先获取表格

的对象ID
select * from sys.tables order by name   

第2步:现在获取表格的列并在其中搜索:

 select * from a where 'Empty' in (select name from sys.columns  where  object_id =1977058079)

注意:object_id是您在相关表格

的第一步中获取的内容

答案 2 :(得分:1)

我建议动态SQL

- 首先,您将变量@TableName设置为实际表格的名称。

DECLARE @TableName VARCHAR(100)='a';

- 以下语句将创建所有列的列表,其数据类型包含单词&#34; char&#34; (其他人不应该持有值Empty

DECLARE @ColList VARCHAR(MAX)=
STUFF(
    (
        SELECT ' OR ' + COLUMN_NAME + ' LIKE ''%empty%''' 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME=@TableName AND DATA_TYPE LIKE '%char%'
        FOR XML PATH('')
     ),1,4,'');

- 此语句构建命令

DECLARE @cmd VARCHAR(MAX)=
(
    SELECT 'SELECT * FROM [' + @TableName + '] WHERE ' + @ColList
);

- 在这里你可以看到命令

PRINT @cmd;

- 这里执行

EXEC(@cmd);

答案 3 :(得分:1)

你可以在动态查询的帮助下使用unpivot来完成它,这里我已经为你做了一个工作示例,你可能需要做一些修改,以便将下面的psedo代码放在你的工作中。

  

使用了样本表结构:

create table ColTest
(
name1 varchar(10),
name2 varchar(10),
name3 varchar(10),
name4 varchar(10)
)
insert into  ColTest values ('sdas','asdasda','ewrewr','erefds')
insert into  ColTest values ('sdas','asdasda','EMPTY','erefds')
insert into  ColTest values ('EMPTY','asdasda','ewrewr','erefds')



DECLARE @table_name SYSNAME
SELECT @table_name = 'ColTest'

DECLARE @tmpTable SYSNAME
SELECT @tmpTable = 'ColTest2'

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT * into 
 ' + @tmpTable + '
FROM ' + @table_name + '
UNPIVOT (
    cell_value FOR column_name IN (
        ' + STUFF((
    SELECT ', [' + c.name + ']'
    FROM sys.columns c WITH(NOLOCK)
    LEFT JOIN (
        SELECT i.[object_id], i.column_id
        FROM sys.index_columns i WITH(NOLOCK)
        WHERE i.index_id = 1
    ) i ON c.[object_id] = i.[object_id] AND c.column_id = i.column_id
    WHERE c.[object_id] = OBJECT_ID(@table_name)
        AND i.[object_id] IS NULL
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + '
    )
) unpiv'




PRINT @SQL
EXEC sys.sp_executesql @SQL

select * from ColTest2 where cell_value = 'EMPTY'

答案 4 :(得分:1)

尝试此动态查询,它将检查包含字符数据的所有列,并列出具有“空”字样的列。

DECLARE @SearchText VARCHAR(50) = 'Empty'
DECLARE @sql NVARCHAR(MAX) = 'SELECT '

SELECT @sql = @sql + 'MAX(CASE WHEN ' + c.COLUMN_NAME + ' LIKE ''%'+ @SearchText +'%'' THEN ''' + c.COLUMN_NAME +''' ELSE '''' END) + '','' + '
FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_SCHEMA = 'dbo' and c.TABLE_NAME = 'a' 
    AND c.DATA_TYPE IN ('varchar','char','nvarchar','nchar','sysname')

SET @sql = @sql + ''''' FROM dbo.a'

EXEC sys.sp_executesql @sql

希望这有帮助