2012-03-29 60 views
25

使用SQL Server 2005时,我如何获得下面的语句或者输出如我所愿。将NULL转换为空字符串 - 将字符串转换为uniqueidentifier时转换失败

SELECT Id 'PatientId', 
     ISNULL(ParentId,'') 'ParentId' 
FROM Patients 

ParenId是uniqueidentifier,允许NULL,但目前看来,查询优化器尝试也转换''uniqueidentifier对于其中ParentId = NULL。正如标题所说这是确切的错误信息查询亚军抛出我的脸行!

  • 我如何获得服务器返回空字符串ParentId = NULL

回答

53
SELECT Id 'PatientId', 
     ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId' 
FROM Patients 

ISNULL总是试图返回具有相同数据类型作为第一个参数的类型的结果。所以,如果你希望结果是一个字符串(varchar),你最好确保这是第一个参数的类型。


COALESCE通常是更好的功能比ISNULL使用,因为它认为所有参数的数据类型和施加适当的precedence规则以确定最终产生的数据类型。不幸的是,在这种情况下,uniqueidentifier具有比varchar更高的优先级,所以这没有帮助。

(它也通常是优选的,因为其延伸至两个以上的参数)

+0

谢谢你给超过通缉。我从你的答案中学到了很多东西,将它标记为4分钟内回答Greetz – Deeptechtons 2012-03-29 10:29:07

+0

@Damien_The_Unbeliever我试着'COALESCE(CONVERT(varchar(50),ParentId),'')'和'ISSNULL(CONVERT(varchar(50), ParentId),'')',我仍然得到一个零而不是一个空单元格。我的ParentId是smallint。 – bteague 2017-08-23 16:04:22

+0

也试过ISNULL(CAST(ParentId as VARCHAR(50)),'')和COALESCE(CAST(ParentId as VARCHAR(50)),'') – bteague 2017-08-23 16:08:34

5

您需要CASTParentIdnvarchar,使输出始终是相同的数据类型。

SELECT Id 'PatientId', 
     ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId' 
FROM Patients 
8
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients 

这是必要的,因为场PARENTID不是VARCHAR/nvarchar的类型。这将做的伎俩:

Select ID, IsNull(ParentID,'') from Patients 
相关问题