我有一个超过130列的表(不要问 - 我没有成功).我们需要从此表中删除每个空行(每个字段为空),而不显式列出每列.理想情况下,我想要一个使用动态SQL的解决方案,并且可以应用于任何表.我怎样才能做到这一点?
这至少会让你到达那里:
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)
| 归档时间: |
|
| 查看次数: |
6990 次 |
| 最近记录: |