如何在 SQL Server 2008 R2 中的所有行中删除只有一个值的多列

Posted

技术标签:

【中文标题】如何在 SQL Server 2008 R2 中的所有行中删除只有一个值的多列【英文标题】:How to remove multiple columns that have only one value across all rows in SQL Server 2008 R2 【发布时间】:2013-11-16 22:00:44 【问题描述】:

我在 SQL Server 2008 R2 中有一个大表,它包含许多列和数百万行。

有些列的所有行都具有相同的值。

例如

col1 col2 col3  col4 col5.....
a     b    c     1    null
a     d    e     1    null
a     f    g     1    null
a     h    I     1    null

我想删除 col1、col4、col5 等列以及更多类似的列。

我知道删除列,我想我只是不知道在这种情况下如何选择多个列

在这种情况下我该如何处理?

非常感谢

【问题讨论】:

见***.com/questions/5626344/… 我了解alter table drop columns,但是在这种情况下如何选择这些列? 【参考方案1】:

您可以在一个语句中指定多个列:

alter table 
    mytable
drop column
    col4, col5

要查看给定列有多少值,您可以使用count distinct

Select
    count(distinct col1),
    count(distinct col2),
    count(distinct col3),
    ...
from
    mytable

以下是如何动态构建上一个查询的概要:

Declare 
    @sql nvarchar(max) = N'select',
    @tab sysname = 'mytable', -- replace with table name
    @col sysname,
    @sep nvarchar(1)

Declare col_cursor cursor local fast_forward for
select
    name
from
    sys.columns
where
    object_id = object_id(@tab)

open col_cursor

fetch next from col_cursor into @col

while @@fetch_status = 0
begin
    set @sql += @sep + N' count(distinct ' + quotename(@col) + N') as ' 
        + quotename(@col)
    set @sep = N','
    fetch next from col_cursor into @col
end

close col_cursor
deallocate col_cursor

set @sql += ' from ' + quotename(@tab)

exec sp_executesql @sql

【讨论】:

是的,我可以指定,但我不知道我应该指定哪一列,我需要检查该列是否具有相同的值并且有很多列。所以我想要一个更自动化的方法 @user3000407 为此添加了查询。 @user3000407,我相信您可以通过键入数百列来解决您的问题。事实上,如果你不等我们做你的工作,你可能已经解决了。劳伦斯给了你一个解决方案。如果这还不够,请在您的应用程序中编写获取列、生成查询然后删除列的代码。 @Lajos Arpad:对不起,我是 sql 编程新手。正如您所提到的,我会尝试输入所有列名,但这并不实际。在发布这个问题之前,我确实花了很多时间尝试一些 sql 编程方式。但是我对复杂的 sql 编程了解不多,所以我决定将 java 与 sql 结合起来,这是我在等待时才想到的一个想法,它对我来说很好用。感谢劳伦斯,你帮了很多忙!并感谢你 Lajos 不信任那些努力的人!老实说,对人们这么说不太好。 @user3000407,单独询问单独的问题。另外,这是科学,不是宗教,所以如果我们想依靠信仰,我们可以去教堂,但在开发者论坛中,任何事情都不应与信仰相关。如果您更仔细地阅读我之前的评论,您会发现我的最后一句话描述了您需要在 Java 代码中执行的解决问题的确切步骤。此外,讽刺没有回报。您应该承认,您已经大胆并希望我们代替您解决整个问题。我们想指导您,但我们不想代替您工作,除非您付钱给我们。

以上是关于如何在 SQL Server 2008 R2 中的所有行中删除只有一个值的多列的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 SQL Server 2008 R2 数据库中的最后 N 条记录? [复制]

如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程? [复制]

如何安装sql server 2008 r2

如何在 SQL Server 2014 中从 SQL Server 2008 R2 恢复备份?

如何在windows server2008 r2上打开internet信息服务 iis 管理器

SQL Server 2008 中的 SQL Server 2008 R2 中的 dm_os_volume_stats 等效项是啥?