我有一个优势数据库V11,其中我当前存储一个唯一标识符,它是使用NewIDString生成22个字符的GUID字符串(' F')。
ADS帮助的片段如下: -
" F或文件 - 使用文件和URL安全base64编码编码为22字节字符串的GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。 Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中。"
是否可以在Microsoft SQL中生成相同格式的GUID字符串?
如果没有,ADS帮助文件列出了如下其他格式: -
NEWIDSTRING 返回格式为字符串的GUID。如果未指定format参数,则GUID字符串将格式化为十六进制字符串,格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。 format参数可以是以下值:
M或MIME - 使用MIME base64编码编码为24字节字符串的GUID,格式为xxxxxxxxxxxxxxxxxxxxxxxx。 Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中。
F或文件 - 使用文件和URL安全base64编码编码为22字节字符串的GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。 Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中。
N或Numbers - 一个编码为32字节十六进制字符串值的GUID,格式为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。
D或Delimited - 编码为32字节十六进制字符串的GUID,格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
B或Bracketed - 编码为32字节十六进制字符串的GUID,格式为[xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
P或括号 - 编码为32字节十六进制字符串的GUID,格式为(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
C或Curlybraces - 编码为32字节十六进制字符串的GUID,格式为{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
MS-SQL可以生成其中一个吗?
此致
麦克
答案 0 :(得分:3)
在SQL SerVer中,NEWID函数创建新的GUID(SQL Server数据类型称为UNIQUEIDENTIFIER)。 GUID是二进制值,您在问题中提到的各种格式就是这样,只是二进制值的不同字符串表示。在NEWID示例A的MSDN页面中,GUID的标准字符串表示形式为XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。
答案 1 :(得分:2)
在SQL-Server中创建BASE64编码的字符串并不是直截了当的,but possible。
因此,从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,最后两个字符(总是“==”)被移除。