我有一个优势数据库V11,我目前在其中存储一个唯一标识符,该标识符是使用NewIDString('F')生成的22个字符长的GUID字符串。
ADS帮助中的片段如下:-
"F或文件–使用文件和URL安全base64编码的22字节字符串的GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中。"
是否可以在Microsoft SQL中生成相同格式的GUID字符串?
如果没有,ADS帮助文件列出其他格式如下:-
新闻字符串返回格式化为字符串的GUID。如果未指定格式参数,GUID字符串将格式化为十六进制字符串,格式为xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx。格式参数可以是以下值:
M或MIME–使用MIME base64编码的24字节字符串GUID,格式为xxxxxxxxxxxxxxxxxxx。Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中
F或File–使用文件和URL安全base64编码的22字节字符串GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中
N或Numbers–一个GUID,编码为32字节的十六进制字符串值,格式为xxxxxxxxxxxxxxxxxxxxx
D或Delimited–编码为32字节十六进制字符串的GUID,格式为xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx
B或带括号–编码为32字节十六进制字符串的GUID,格式为[xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxx]
p或带圆括号–编码为32字节十六进制字符串的GUID,格式为(xxxxxxxx-xxxx-xxxx-XXxxxxxxxxxxxx)
C或Curlyraces–编码为32字节十六进制字符串的GUID,格式为{xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx}
MS-SQL可以生成其中一个吗?
问候
Mike
在SQL SerVer中,NEWID函数会创建新的GUID(SQL SerVer数据类型称为UNIQUEIDENTIFIER)。GUID是一个二进制值,您在问题中提到的各种格式只是二进制值的不同字符串表示。在NEWID的MSDN页面中,示例A将GUID的标准字符串表示形式显示为XXXXXXXX-XXXX-XXXXXXXXXXXXXX。
在SQL Server中创建BASE64编码的字符串不是直接的,而是可能的。
因此,从ADS创建File
格式GUID所需的一切都可以由SQL Server生成。
NEWIDSTRING(M):
-- Generate a GUID in the format "1Jg/YZ7tNkG7PQr1wVe7KA=="
SELECT
CAST(N'' AS XML).value(
'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
, 'VARCHAR(MAX)'
) AS "NEWIDSTRING_M"
FROM (
SELECT CAST(NEWID() AS VARBINARY) AS bin
) AS bin_sql_server_temp;
NEWIDSTRING(F):
-- Generate a GUID in the format "1Jg/YZ7tNkG7PQr1wVe7KA"
SELECT
LEFT(CAST(N'' AS XML).value(
'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
, 'VARCHAR(MAX)'
), 22) AS "NEWIDSTRING_F"
FROM (
SELECT CAST(NEWID() AS VARBINARY) AS bin
) AS bin_sql_server_temp;
其中F只是M,去掉了最后两个字符(总是"==")。