Ale*_*lec 11 sql sql-server sql-server-2005
我有一个大表,里面有一些NULL.从0表而不是NULL中选择表的最简单方法是什么.
或者,如果没有简单的方法,我愿意用表中的0替换所有空值.
有很多列,我不想通过ISNULL(FieldName,0)AS FieldName之类的东西来遍历每一列.
Jos*_*rly 17
正如许多人所说,最好的方法是ISNULL(),但是如果你想要一个简单的方法来生成所有那些ISNULL(),请使用以下代码:
SELECT 'ISNULL([' + COLUMN_NAME + '], ' +
CASE
WHEN DATA_TYPE = 'bit' THEN '0'
WHEN DATA_TYPE = 'int' THEN '0'
WHEN DATA_TYPE = 'decimal' THEN '0'
WHEN DATA_TYPE = 'date' THEN '''1/1/1900'''
WHEN DATA_TYPE = 'datetime' THEN '''1/1/1900'''
WHEN DATA_TYPE = 'uniqueidentifier' THEN '00000000-0000-0000-0000-000000000000'
ELSE '''''' -- everything else get's an empty string
END + ') AS [' + COLUMN_NAME + '],'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName'
Run Code Online (Sandbox Code Playgroud)
这将使繁琐的工作变得更加容易,然后您只需编辑输出以考虑各种字段类型(int,varchar,date等)
编辑:使用默认值计算各种数据类型.
你有两个选择
ISNULL(yourColumn,0) AS columnName
Run Code Online (Sandbox Code Playgroud)
或者实际修复问题并将所有NULL数据更改为0
UPDATE table
SET column = 0
WHERE
column IS NULL -- remember "column = NULL" always equates to NULL!
Run Code Online (Sandbox Code Playgroud)
当你这样做时不要忘记WHERE或者一切都会变成0!
归档时间: |
|
查看次数: |
32366 次 |
最近记录: |