使用SQL Server 2005如何获取以下语句,或者根据需要获取输出。
SELECT Id 'PatientId',
ISNULL(ParentId,'') 'ParentId'
FROM Patients
ParenId是允许使用uniqueidentifier
的NULL
,但似乎查询优化器还会尝试将''
所在的行也将uniqueidentifier
转换回ParentId = NULL
。正如标题所述,这是查询的确切错误信息跑步者向我投掷!
ParentId = NULL
的空字符串SELECT Id 'PatientId',
ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId'
FROM Patients
ISNULL
总是尝试返回具有same数据类型作为其第一个参数类型的结果。因此,如果您希望结果为字符串(ISNULL
),则最好确保这是第一个参数的类型。
varchar
通常比COALESCE
更好用,因为它考虑all参数数据类型并应用适当的COALESCE
规则来确定最终的结果数据类型。不幸的是,在这种情况下,ISNULL
的优先级高于precedence,所以无济于事。
(由于它扩展到两个以上的参数,因此通常也更受欢迎)
uniqueidentifier
这是必需的,因为字段ParentID不是varchar / nvarchar类型。这将达到目的:
varchar
您需要将Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients
Select ID, IsNull(ParentID,'') from Patients
作为CAST
,以便输出始终是相同的数据类型。
ParentId
从Sql Server 2012开始:字符串串联函数nvarchar
隐式转换为字符串。因此,另一个选择是
SELECT Id 'PatientId',
ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId'
FROM Patients
[CONCAT
将CONCAT
值转换为空字符串。
有些人会认为这很hacky,因为它只是利用了函数的副作用,而手本身的任务不需要该函数本身。