任何人都可以帮我找到sql server数据库中的所有空列我是sql server的新手。
我在oracle数据库中编写了一个查询,如下所示,但我不知道如何在sql server中编写相同的东西
SET serveroutput ON;
DECLARE
v_count NUMBER;
CURSOR c2
IS
SELECT Column_name FROM all_tab_columns WHERE table_name= 'A';
BEGIN
FOR r1 IN c2
LOOP
EXECUTE immediate 'SELECT COUNT('||r1.column_name||') FROM HR'||'.'||'A' INTO v_count ;
IF v_count =0 THEN
dbms_output.put_line('Column'||' '||r1.column_name||' '||'is'||' '||v_count);
END IF;
END LOOP;
END;
答案 0 :(得分:1)
以下是您要找的内容:
-- Returns a list of all columns in current database
-- where the column's value is null for all records.
declare @tempTable TABLE
(
TableSchema nvarchar(256),
TableName nvarchar(256),
ColumnName sysname,
NotNullCnt bigint
);
declare @sql nvarchar(4000);
declare @tableSchema nvarchar(256);
declare @tableName nvarchar(256);
declare @columnName sysname;
declare @cnt bigint;
declare columnCursor cursor FOR
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES';
open columnCursor;
fetch next FROM columnCursor INTO @tableSchema, @tableName, @columnName;
while @@FETCH_STATUS = 0
begin
-- use dynamic sql to get count of records where column is not null
SET @sql = 'select @cnt = COUNT(*) from [' + @tableSchema + '].[' + @tableName +
'] where [' + @columnName + '] is not null';
-- print @sql; --uncomment for debugging
exec sp_executesql @sql, N'@cnt bigint output', @cnt = @cnt output;
INSERT INTO @tempTable SELECT @tableSchema, @tableName, @columnName, @cnt;
fetch next FROM columnCursor INTO @tableSchema, @tableName, @columnName;
end
close columnCursor;
deallocate columnCursor;
SELECT * FROM @tempTable WHERE NotNullCnt = 0;
在sql server 2008中测试代码并正常工作。
答案 1 :(得分:0)
它在SQL Server中非常相似,虽然我不会使用游标:
DECLARE @sql NVARCHAR(MAX)
SELECT @sql = ISNULL(@sql + 'UNION ALL', '') + '
SELECT ''' + TABLE_SCHEMA + '.' + TABLE_NAME + '.' + COLUMN_NAME + ''' AS col FROM ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' HAVING COUNT(' + COLUMN_NAME + ') = 0
'
FROM INFORMATION_SCHEMA.COLUMNS
EXEC (@SQL)