如何以与Advantage Database Server相同的格式生成GUID字符串?

时间:2015-02-14 07:58:12

标签: sql sql-server guid advantage-database-server

我有一个优势数据库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可以生成其中一个吗?

此致

麦克

2 个答案:

答案 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,最后两个字符(总是“==”)被移除。