简体   繁体   English

如何在SQL Server 2008中对列名称赋予条件

[英]How can I give condition on the column names in SQL Server 2008

I have my database with the columns as follows: 我的数据库具有以下列:

keyword, part1_d1, part1_d2 ........ part1_d25, part2_d26, ......part2_d34

FYI: d1 through d34 are documents.. 仅供参考:d1到d34是文档。

How can I give a query to obtain columns with column_name like '%part1%'; 我如何给出查询以获取具有column_name之类的列,例如'%part1%'; as below 如下

keyword, part1_d1, part1_d2, ........ part1_d25 

I tried the query: 我尝试查询:

select (Select COLUMN_NAME 
          From INFORMATION_SCHEMA.COLUMNS
         where COLumn_NAME like '%part1%') 
       , keyword
  from sample

But it didn't work... 但这没用...

Please let me know what to do? 请让我知道该怎么办?

SQL doesn't support dynamic column names - you either have to explicitly state which ones you want, or use the asterisk "*" to indicate all the columns in the table. SQL不支持动态列名-您必须明确声明要使用的列名,或者使用星号“ *”表示表中的所有列。

Dynamic SQL would allow you to get a list of the columns, and create a SQL statement as a string before executing it - which is what you need to eventually use for the query you attempted. 动态SQL将允许您获取列的列表,并在执行之前将SQL语句创建为字符串-这是最终用于尝试查询的条件。 I recommend reading this-- The Curse and Blessings of Dynamic SQL -- before looking further. 我建议在进一步阅读之前阅读此内容-Dynamic SQL的诅咒和祝福

SQL Server 2005+: SQL Server 2005+:

DECLARE @sql NVARCHAR(4000)

   SET @sql = 'SELECT ' + STUFF((SELECT ', ' + x.column_name
                                   FROM INFORMATION_SCHEMA.COLUMNS x
                                   JOIN INFORMATION_SCHEMA.TABLES y ON y.object_id = x.object_id
                                  WHERE x.column_name LIKE '%part1%'
                                    AND y.table_name = 'sample'
                               GROUP BY x.column_name
                                FOR XML PATH ('')), 1, 2, '') + ' , keyword
                FROM sample '

BEGIN

  EXEC sp_executesql @sql

END

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM