猿问

SQL:仅选择具有NULL值的列

如何选择表中所有行仅包含NULL值的所有列?我正在使用MS SQL Server 2005。我正在尝试找出表中未使用的列,因此可以删除它们。



慕无忌1623718
浏览 1083回答 3
3回答

守着星空守着你

这是sql 2005或更高版本:用表名替换ADDR_Address。declare @col varchar(255), @cmd varchar(max)DECLARE getinfo cursor forSELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_IDWHERE t.Name = 'ADDR_Address'OPEN getinfoFETCH NEXT FROM getinfo into @colWHILE @@FETCH_STATUS = 0BEGIN    SELECT @cmd = 'IF NOT EXISTS (SELECT top 1 * FROM ADDR_Address WHERE [' + @col + '] IS NOT NULL) BEGIN print ''' + @col + ''' end'    EXEC(@cmd)    FETCH NEXT FROM getinfo into @colENDCLOSE getinfoDEALLOCATE getinfo

慕尼黑的夜晚无繁华

这应该为您提供表“ Person”中所有列只有NULL值的列表。您将获得多个结果集的结果,这些结果集为空或包含单个列的名称。您需要在两个地方替换“ Person”,才能将其与另一个表一起使用。DECLARE crs CURSOR LOCAL FAST_FORWARD FOR SELECT name FROM syscolumns WHERE id=OBJECT_ID('Person')OPEN crsDECLARE @name sysnameFETCH NEXT FROM crs INTO @nameWHILE @@FETCH_STATUS = 0BEGIN    EXEC('SELECT ''' + @name + ''' WHERE NOT EXISTS (SELECT * FROM Person WHERE ' + @name + ' IS NOT NULL)')    FETCH NEXT FROM crs INTO @nameENDCLOSE crsDEALLOCATE crs

缥缈止盈

这是Bryan在2008年及以后的查询的更新版本。它使用INFORMATION_SCHEMA.COLUMNS,为表架构和表名称添加变量。列数据类型已添加到输出中。查找特定数据类型的列时,包含列数据类型会有所帮助。我没有添加列宽或其他任何内容。对于输出,使用RAISERROR ... WITH NOWAIT,因此文本将立即显示,而不是像PRINT那样一次全部显示(大部分)。SET NOCOUNT ON;DECLARE @ColumnName sysname,@DataType nvarchar(128),@cmd nvarchar(max),@TableSchema nvarchar(128) = 'dbo',@TableName sysname = 'TableName';DECLARE getinfo CURSOR FORSELECT     c.COLUMN_NAME    ,c.DATA_TYPEFROM    INFORMATION_SCHEMA.COLUMNS AS cWHERE    c.TABLE_SCHEMA = @TableSchema    AND c.TABLE_NAME = @TableName;OPEN getinfo;FETCH NEXT FROM getinfo INTO @ColumnName, @DataType;WHILE @@FETCH_STATUS = 0BEGIN    SET @cmd = N'IF NOT EXISTS (SELECT * FROM ' + @TableSchema + N'.' + @TableName + N' WHERE [' + @ColumnName + N'] IS NOT NULL) RAISERROR(''' + @ColumnName + N' (' + @DataType + N')'', 0, 0) WITH NOWAIT;';    EXECUTE (@cmd);    FETCH NEXT FROM getinfo INTO @ColumnName, @DataType;END;CLOSE getinfo;DEALLOCATE getinfo;
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答