【问题标题】:Select Columns Conditionally in SQL Server [duplicate]在 SQL Server 中有条件地选择列 [重复]
【发布时间】:2014-10-08 15:15:58
【问题描述】:

我想选择其名称不包含 Id 的每一列

这是我尝试过的:

Select *
From Table_Name
Where Column_Name Like '%Id%'

解决办法是什么?

【问题讨论】:

  • 向我们展示一些示例数据,以及您要选择哪些行(哪些行不选择)
  • 我认为他试图获取列的名称,而不是其中的数据。

标签: sql sql-server sql-server-2012


【解决方案1】:

你可以这样做。假设表为列 id,value1,value2。您需要选择名称类似于 value 的列名。

CREATE TABLE [dbo].[tbl1](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [value1] [varchar](2) NULL,
    [value2] [varchar](4) NULL)


GO

create table  #tblcols (colname varchar(100))

insert into #tblcols
select Column_name from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'tbl1'

delete from #tblcols where colname not like '%val%'
select * from #tblcols

declare @sql nvarchar(500)


SELECT @sql = COALESCE(@sql + ', ', ' ') +  colname FROM #tblcols


 set @sql = 'select ' + @sql + ' from tbl1'
 select @sql

 exec sp_executesql  @sql

 drop table  #tblcols

然后,使用动态 SQL 创建 sql 语句,如 select value1,value2 from tbl。并使用EXEC SP_EXECUTESQL @SQL 获取结果。

【讨论】:

  • 谢谢你,帮了大忙:)
【解决方案2】:

我想你会想为此使用 INFORMATION_SCHEMA。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Name Of Your Table, As A String'
AND COLUMN_NAME NOT LIKE '%Id%'

More on INFORMATION_SCHEMA from MSDN.

【讨论】:

    【解决方案3】:

    试试这个:

    select * from sys.columns where
    name NOT like '%ID%'
    

    sys.columns

    或

    select * from INFORMATION_SCHEMA.COLUMNS
    where COLUMN_NAME NOT   like '%ID%'
    

    INFORMATION_SCHEMA.COLUMNS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-06
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多