将NULL转换为空字符串 - 从字符串转换为uniqueidentifier时转换失败

Dee*_*ons 33 sql-server sql-server-2005 uniqueidentifier

使用SQL Server 2005如何获得以下语句,或者更确切地说是我想要的输出.

SELECT Id   'PatientId',
       ISNULL(ParentId,'')  'ParentId'
FROM Patients
Run Code Online (Sandbox Code Playgroud)

ParenId是uniqueidentifier允许的NULL,但似乎查询优化器也试图转换''uniqueidentifier行中的那些ParentId = NULL.如标题所示,这是查询运行程序抛出的确切错误信息!

  • 如何让服务器返回空字符串 ParentId = NULL

Dam*_*ver 63

SELECT Id   'PatientId',
       ISNULL(CONVERT(varchar(50),ParentId),'')  'ParentId'
FROM Patients
Run Code Online (Sandbox Code Playgroud)

ISNULL始终尝试返回与其第一个参数的类型具有相同数据类型的结果.所以,如果你想让结果成为一个字符串(varchar),你最好确保它是第一个参数的类型.


COALESCE通常是一个比使用更好的函数ISNULL,因为它考虑所有参数数据类型并应用适当的优先级规则来确定最终的结果数据类型.不幸的是,在这种情况下,uniqueidentifier具有更高的优先级varchar,所以这没有帮助.

(它通常也是首选,因为它扩展到两个以上的参数)


小智 8

Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为字段ParentID不是varchar/nvarchar类型.这样就可以了:

Select ID, IsNull(ParentID,'') from Patients
Run Code Online (Sandbox Code Playgroud)


Cur*_*urt 6

您需要CAST使用ParentIdas nvarchar,以便输出始终是相同的数据类型.

SELECT Id   'PatientId',
       ISNULL(CAST(ParentId as nvarchar(100)),'')  'ParentId'
FROM Patients
Run Code Online (Sandbox Code Playgroud)