Sql server 给定两个整数,如何在sql server中将它们组合成一个BIGINT?

Sql server 给定两个整数,如何在sql server中将它们组合成一个BIGINT?,sql-server,sql-server-2012,Sql Server,Sql Server 2012,现在我能想到的就是: DECLARE @x INT = 0x123 DECLARE @y INT = 0x456 DECLARE @z BIGINT = @x * CAST(4294967296 AS BIGINT) + @y PRINT CONVERT(VARBINARY(16), @z) 它确实打印0x000012300000456 但我的问题是关于@x*CAST(4294967296作为BIGINT)+@y。这似乎有点尴尬,如果它是作为一个真正的乘法实现的,那么它确实是低效的(尽管与大的

现在我能想到的就是:

DECLARE @x INT = 0x123
DECLARE @y INT = 0x456
DECLARE @z BIGINT = @x * CAST(4294967296 AS BIGINT) + @y
PRINT CONVERT(VARBINARY(16), @z)
它确实打印0x000012300000456

但我的问题是关于
@x*CAST(4294967296作为BIGINT)+@y
。这似乎有点尴尬,如果它是作为一个真正的乘法实现的,那么它确实是低效的(尽管与大的计划相比微不足道)

那么,在SQLServer2012中是这样做的吗

编辑1

我需要以任何1-1的方式组合它们。我对最有效的代码感兴趣。显然,这纯粹是学术性的,因为我不会因为我要做的方式而预测任何性能问题。

我在大表(24M+行)上的研究(要得到两个int列的组合列,组合列的数据类型对我来说无关紧要): CONCAT vs“乘法和求和” 结果分别为6914毫秒和5645毫秒

SELECT CONCAT(int1,'_',int2) b ...
SELECT CAST(ISNULL(int1,0) AS BIGINT)*4294967296 + ISNULL(int2,0) b ...

现在还不清楚如何组合两个有符号整数?类似于
选择CAST(CAST(@x作为二进制(4))+CAST(@y作为二进制(4))作为BIGINT)
@MartinSmith-请参见我的编辑1。出于好奇,用
4294967296
乘以什么效率更高?