我有个问题
我尝试过,google但看起来他们不喜欢*
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用字符串替换,我知道我可以:
null
SELECT ISNULL(UnitsOnOrder,'No Data') FROM tbl
问题
ISNULL()
喜欢
SELECT ISNULL(* , 'NO data') FROM tbl
我认为由于数据类型这会很棘手,您不能将字符串传递给INT数据类型,所以我也该如何解决这个问题
INT
更新
好吧,如果我使用ISNULL()的数据类型int将会返回0 ,这对我来说是一个值,我该如何传递空字符串?
ISNULL(
int
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...