使用SQL Server选择非空列

使用SQL Server选择非空列,第1张

使用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*
)的表上进行尝试,然后在不到一分钟的时间内正确返回。希望这足够快…



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4902163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存