如何从任何SQL表中删除每个空行

Ric*_*nka 5 sql sql-server

我有一个超过130列的表(不要问 - 我没有成功).我们需要从此表中删除每个空行(每个字段为空),而不显式列出每列.理想情况下,我想要一个使用动态SQL的解决方案,并且可以应用于任何表.我怎样才能做到这一点?

Cod*_*ian 3

这至少会让你到达那里:

DECLARE @myTable VARCHAR(MAX)

SET @MyTable = 'myTable'
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ' AND ','')+  '(' +quotename(COLUMN_NAME) + ' = '''' OR  ' +quotename(COLUMN_NAME) + ' IS NULL)'
FROM information_schema.columns 
WHERE table_NAME = @myTable

SET @SQL = 'DELETE FROM ' + quotename(@myTable) + ' WHERE ' + @sql
select @sql 
Run Code Online (Sandbox Code Playgroud)

请注意使用 来QUOTENAME处理奇怪命名的列。另请注意,这假设所有列都是字符串列(或者可以隐式转换为字符串)。在您的解决方案中,您可能需要一些条件逻辑(使用CASE)来处理不同的数据类型,例如

SELECT @SQL = COALESCE(@SQL + ' AND ','')+  '(' +quotename(COLUMN_NAME) + ' = ' + CASE WHEN data_type = 'int' then '0' when data_type = 'varchar' then '''' else '''' end + ' OR  ' +quotename(COLUMN_NAME) + ' IS NULL)'
    FROM information_schema.columns 
    WHERE table_NAME = @myTable
Run Code Online (Sandbox Code Playgroud)