如何在 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 2014 中从 SQL Server 2008 R2 恢复备份?
如何在windows server2008 r2上打开internet信息服务 iis 管理器
SQL Server 2008 中的 SQL Server 2008 R2 中的 dm_os_volume_stats 等效项是啥?