栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用SQL Server选择非空列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用SQL Server选择非空列

我不知道这是否更快,但是您可能会使用一个技巧:

FOR XML AUTO
将省略没有内容的列:

DECLARE @tbl TABLE(col1 INT,col2 INT,col3 INT);INSERT INTO @tbl VALUES (1,2,NULL),(1,NULL,NULL),(NULL,NULL,NULL);SELECt * FROM @tbl AS tblFOR XML AUTO

结果

col3
是:丢失了…

<tbl col1="1" col2="2" /><tbl col1="1" /><tbl />

知道了这一点,您可以找到所有行中都不为NULL的列列表,如下所示:

DECLARE @ColList VARCHAr(MAX)=STUFF(    (    SELECt DISTINCT ',' + Attr.value('local-name(.)','nvarchar(max)')    FROM    (        SELECt        ( SELECT * FROM @tbl AS tbl FOR XML AUTO,TYPE        ) AS TheXML    ) AS t    CROSS APPLY t.TheXML.nodes('/tbl/@*') AS A(Attr)     FOR XML PATH('')    ),1,1,'');SELECT @ColList

的内容

@ColList
是现在
col1,col2
。您可以在动态创建的字符串中放置此字符串
SELECT

更新:提示

将替换为排除所有 not-nullable

SELECT *
创建的列列表将是非常聪明的。并且-如果需要并且可能的话-
类型包含非常大的数据(BLOB)。
INFORMATION_SCHEMA.COLUMNS
__

UPDATE2:性能

不知道您的 大数据 实际上意味着什么…只需在具有约500.000行(带有

SELECT*
)的表上进行尝试,然后在不到一分钟的时间内正确返回。希望这足够快…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号