微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 2008中的所有列名称如何使用ISNULL?

我有个问题

我试图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...

原文地址:https://www.jb51.cc/mssql/79135.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐