我正在使用以下代码在 SQL FileTable 中创建路径
SET @path = '/' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 1, 6))) + '.' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 7, 6))) + '.' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 13, 4)));
其中@customerId 是唯一标识符
稍后在检索文档以使用 path_locator 并从路径中获取 customerId 时,我有一个要求。
我尝试了各种不同的方法,但我一直无法找到解决方案。下面是我的 TSQL,我从 customerId 开始并将其转换为路径,然后尝试再次转换回来。我可以得到标识符的 BINARY(16) 版本的字符串表示,但后来我被卡住了。
非常感谢任何帮助。
DECLARE @customerId UNIQUEIDENTIFIER;
SET @customerId = '680EC8FA-F54C-44D6-9308-61F421E11E64';
SELECT @customerId AS customerId;
DECLARE @path VARCHAR(512);
SET @path = '/' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 1, 6))) + '.' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 7, 6))) + '.' +
CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 13, 4)));
DECLARE @temp VARCHAR(512);
DECLARE @part1 VARCHAR(20);
DECLARE @part2 VARCHAR(20);
DECLARE @part3 VARCHAR(20);
SET @part1 = SUBSTRING(@path, 2, CHARINDEX('.', @path) -2);
SET @temp = SUBSTRING(@path, CHARINDEX('.', @path) + 1, 500);
SET @part2 = SUBSTRING(@temp, 1, CHARINDEX('.', @temp) -1);
SET @part3 = SUBSTRING(@temp, CHARINDEX('.', @temp) + 1, 500);
DECLARE @int1 BIGINT;
DECLARE @int2 BIGINT;
DECLARE @int3 BIGINT;
SET @int1 = CONVERT(BIGINT, @part1);
SET @int2 = CONVERT(BIGINT, @part2);
SET @int3 = CONVERT(BIGINT, @part3);
SELECT 'Target',
CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 1, 6)),
CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 7, 6)),
CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), @customerId), 13, 4));
SELECT 'Result', @part1, @part2, @part3
SELECT 'Target',
SUBSTRING(CONVERT(BINARY(16), @customerId), 1, 6),
SUBSTRING(CONVERT(BINARY(16), @customerId), 7, 6),
SUBSTRING(CONVERT(BINARY(16), @customerId), 13, 4)
SELECT 'Result',
CONVERT(BINARY(16), @int1), CONVERT(BINARY(16), @int2), CONVERT(BINARY(16), @int3);
SELECT CONVERT(BINARY(16), @int1 + @int2 + @int3),master.dbo.fn_varbintohexstr(CONVERT(BINARY(16), @int1 + @int2 + @int3))
, @customerId, @path, CONVERT(BINARY(16), @customerId)
DECLARE @binaryString VARCHAR(50)
SET @binaryString = RIGHT(master.dbo.fn_varbintohexstr(@int1), 12) +
RIGHT(master.dbo.fn_varbintohexstr(@int2), 12) +
RIGHT(master.dbo.fn_varbintohexstr(@int3), 8);
SELECT 'Binary String', @binaryString;