SQLServer: 在 case 语句中将 UniqueIdentifier 转换为 string

我们有一个日志表,其中有一个消息列,该列有时具有异常堆栈跟踪。我有一些标准来确定消息是否具有这个。我们不希望向客户显示这些信息,而是希望显示以下信息:

发生内部错误,请与我们联系 带有参考代码 Xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

其中 xxx etc 是表中的 guid 列:

declare @exceptionCriteria nvarchar(50)
select @exceptionCriteria = '%<enter criteria etc>%'


select LogDate,
case
when Message like @exceptionCriteria
then 'Internal Error Occured. Reference Code: ' + str(RequestID)
else Message
end
from UpdateQueue

RequestID是 SQLServer 中的 Guid 数据类型,此处不转换为字符串。我看过一些关于如何将 Guid 转换为字符串的代码,但它是多行的,我认为在 case 语句中不会起作用。有什么想法吗?

360571 次浏览

我想我找到答案了:

convert(nvarchar(36), RequestID)

下面是我找到这些信息的链接:

Http://msdn.microsoft.com/en-us/library/ms187928.aspx

在这里可以使用转换函数,但是36个字符就足够保存唯一标识符值了:

convert(nvarchar(36), requestID) as requestID

编辑: 是的,正如注释、 char 或 nchar 中指出的那样,或者任何能够正确操作 ASCII 字符表的函数都可以做到这一点。然后,我的借口是,我通常在多语言/多字母环境中工作,规则是总是使用 nvarchar。这就是我做事的方式,对不起。而且,如果有一天,某个数据库软件开始生成带有非 ASCII 元素的唯一标识符,我就准备好了。

不要用 Str(RequestID),试试 convert(varchar(38), RequestID)

在我看来,uniqueidentifier/GUID 既不是 varchar,也不是 nvarchar,而是 char(36)。因此我使用:

CAST(xyz AS char(36))