SQL Server 2008中的所有列名称如何使用ISNULL?
发布时间:2020-12-12 06:26:44 所属栏目:MsSql教程 来源:网络整理
导读:我有个问题 我试图google,但看起来像他们不喜欢* 我正在使用SQL Server 2008. 我有以下数据库表: P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder------------------------------------------------------------------------ 1 Jarlsberg 10.45 16 15
我有个问题
我试图google,但看起来像他们不喜欢* 我正在使用SQL Server 2008. 我有以下数据库表: P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder ------------------------------------------------------------------------ 1 Jarlsberg 10.45 16 15 2 Mascarpone Null 23 NULL 3 Gorgonzola 15.67 9 20 如果我需要用字符串替换null我知道我做: SELECT ISNULL(UnitsOnOrder,'No Data') FROM tbl 问题 >如何用多列名称使用ISNULL()? 喜欢 SELECT ISNULL(*,'NO data') FROM tbl 我认为这将是棘手的,因为数据类型,你不能传递字符串到INT数据类型,所以我怎么可以修复这个 更新 好的,如果我使用的数据类型为int的ISNULL()将返回0 解决方法您可以在不同列的同一SQL语句中多次使用ISNULL,但必须为每列分别写入:SELECT ISNULL(ProductName,'No Data') AS ProductName,ISNULL(CAST(UnitPrice AS NVARCHAR),'No Data') AS UnitPrice,ISNULL(CAST(UnitsInStock AS NVARCHAR),'No Data') AS UnitsInStock,ISNULL(CAST(UnitsOnOrder AS NVARCHAR),'No Data') AS UnitsOnOrder FROM tbl 如果您正在构建动态SQL查询,则理论上可以收集表中的列列表,并在每个列上生成具有ISNULL的查询.例如: DECLARE @SQL nvarchar(max) SET @SQL = 'SELECT ' SELECT @SQL = @SQL + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR),''No Data'') AS [' + sc.name + '],' FROM sys.objects so INNER JOIN sys.columns sc ON sc.object_id = so.object_id WHERE so.name = 'tbl' -- Remove the trailing comma SELECT @SQL = LEFT(@SQL,LEN(@SQL) - 1) + ' FROM tbl' EXEC sp_sqlexec @SQL 将某些列类型(如时间戳)转换为nvarchar时,此代码有问题,但它说明了该技术. 请注意,如果您有另一列应该返回值,如果值为null,则可以使用COALESCE表达式,如下所示: SELECT COALESCE(ProductName,P_Id) AS Product... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |